1 /*=============================================================================
\r
5 ===============================================================================
\r
6 / Copyright (C) 1997-2007 Sota. All rights reserved.
\r
8 / Redistribution and use in source and binary forms, with or without
\r
9 / modification, are permitted provided that the following conditions
\r
12 / 1. Redistributions of source code must retain the above copyright
\r
13 / notice, this list of conditions and the following disclaimer.
\r
14 / 2. Redistributions in binary form must reproduce the above copyright
\r
15 / notice, this list of conditions and the following disclaimer in the
\r
16 / documentation and/or other materials provided with the distribution.
\r
18 / THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
\r
19 / IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
\r
20 / OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
\r
21 / IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
\r
22 / INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
\r
23 / BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
\r
24 / USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
\r
25 / ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
\r
26 / (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
\r
27 / THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\r
28 /============================================================================*/
\r
32 #include <winsock2.h>
\r
33 #include <windows.h>
\r
37 #include <commctrl.h>
\r
38 #include <windowsx.h>
\r
41 #include "resource.h"
\r
43 #include <htmlhelp.h>
\r
47 #undef __MBSWRAPPER_H__
\r
48 #include "mbswrapper.h"
\r
51 /*===== プロトタイプ =====*/
\r
54 //static BOOL CALLBACK SelectHostProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
\r
55 static INT_PTR CALLBACK SelectHostProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
\r
56 static LRESULT CALLBACK HostListWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
\r
57 static HOSTLISTDATA *GetNextNode(HOSTLISTDATA *Pos);
\r
58 static int GetNodeLevel(int Num);
\r
59 static int GetNodeLevelByData(HOSTLISTDATA *Data);
\r
60 static int GetNodeNumByData(HOSTLISTDATA *Data);
\r
61 static HOSTLISTDATA *GetNodeByNum(int Num);
\r
62 static int SetNodeLevelAll(void);
\r
63 static int UpdateHostToList(int Num, HOSTDATA *Set);
\r
64 static int DelHostFromList(int Num);
\r
65 static int DeleteChildAndNext(HOSTLISTDATA *Pos);
\r
66 static void SendAllHostNames(HWND hWnd, int Cur);
\r
67 static int IsNodeGroup(int Num);
\r
68 static int DispHostSetDlg(HWND hDlg);
\r
70 //static BOOL CALLBACK MainSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
71 //static BOOL CALLBACK AdvSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
72 //static BOOL CALLBACK CodeSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
73 //static BOOL CALLBACK DialupSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
74 //static BOOL CALLBACK Adv2SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
75 static INT_PTR CALLBACK MainSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
76 static INT_PTR CALLBACK AdvSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
77 static INT_PTR CALLBACK CodeSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
78 static INT_PTR CALLBACK DialupSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
79 static INT_PTR CALLBACK Adv2SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
81 static INT_PTR CALLBACK CryptSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
83 static INT_PTR CALLBACK Adv3SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
85 /*===== 外部参照 =====*/
\r
87 extern HWND hHelpWin;
\r
90 extern char UserMailAdrs[USER_MAIL_LEN+1];
\r
91 extern HFONT ListFont;
\r
92 extern char DefaultLocalPath[FMAX_PATH+1];
\r
93 extern int ConnectAndSet;
\r
94 extern SIZE HostDlgSize;
\r
96 /*===== ローカルなワーク =====*/
\r
98 static int Hosts = 0; /* ホスト数 */
\r
99 static int ConnectingHost; /* 接続中のホスト */
\r
100 static int CurrentHost; /* カーソル位置のホスト */
\r
101 static HOSTLISTDATA *HostListTop = NULL; /* ホスト一覧データ */
\r
102 static HOSTDATA TmpHost; /* ホスト情報コピー用 */
\r
103 static int Apply; /* プロパティシートでOKを押したフラグ */
\r
104 static WNDPROC HostListProcPtr;
\r
107 HOSTDATA DefaultHost;
\r
111 /*----- ホスト一覧ウインドウ --------------------------------------------------
\r
114 * int Type : ダイアログのタイプ (DLG_TYPE_xxx)
\r
117 * ステータス (YES=実行/NO=取消)
\r
118 *----------------------------------------------------------------------------*/
\r
120 int SelectHost(int Type)
\r
125 Dlg = hostconnect_dlg;
\r
126 if((ConnectAndSet == YES) || (Type == DLG_TYPE_SET))
\r
127 Dlg = hostlist_dlg;
\r
129 Sts = DialogBox(GetFtpInst(), MAKEINTRESOURCE(Dlg), GetMainHwnd(), SelectHostProc);
\r
139 /*----- ホスト一覧ウインドウのコールバック ------------------------------------
\r
142 * HWND hDlg : ウインドウハンドル
\r
143 * UINT message : メッセージ番号
\r
144 * WPARAM wParam : メッセージの WPARAM 引数
\r
145 * LPARAM lParam : メッセージの LPARAM 引数
\r
149 *----------------------------------------------------------------------------*/
\r
152 //static BOOL CALLBACK SelectHostProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
\r
153 static INT_PTR CALLBACK SelectHostProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
\r
155 static DIALOGSIZE DlgSize = {
\r
157 // { HOST_NEW, HOST_FOLDER, HOST_SET, HOST_COPY, HOST_DEL, HOST_DOWN, HOST_UP, IDHELP, HOST_SIZEGRIP, -1 },
\r
158 { HOST_NEW, HOST_FOLDER, HOST_SET, HOST_COPY, HOST_DEL, HOST_DOWN, HOST_UP, HOST_SET_DEFAULT, IDHELP, HOST_SIZEGRIP, -1 },
\r
159 { IDOK, IDCANCEL, HOST_SIZEGRIP, -1 },
\r
164 static HIMAGELIST hImage;
\r
169 HOSTLISTDATA *Data1;
\r
170 HOSTLISTDATA *Data2;
\r
172 // NM_TREEVIEW *tView;
\r
173 NM_TREEVIEWW *tView;
\r
174 HTREEITEM tViewPos;
\r
175 TV_HITTESTINFO HitInfo;
\r
183 GetWindowRect(hDlg, &Rect);
\r
184 DlgSizeChange(hDlg, &DlgSize, &Rect, 0);
\r
185 RedrawWindow(hDlg, NULL, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_ALLCHILDREN);
\r
188 case WM_INITDIALOG :
\r
189 /* TreeViewでのダブルクリックをつかまえるため */
\r
191 // HostListProcPtr = (WNDPROC)SetWindowLong(GetDlgItem(hDlg, HOST_LIST), GWL_WNDPROC, (LONG)HostListWndProc);
\r
192 HostListProcPtr = (WNDPROC)SetWindowLongPtr(GetDlgItem(hDlg, HOST_LIST), GWLP_WNDPROC, (LONG_PTR)HostListWndProc);
\r
195 // SetClassLong(hDlg, GCL_HICON, (LONG)LoadIcon(GetFtpInst(), MAKEINTRESOURCE(ffftp)));
\r
197 if(AskConnecting() == YES)
\r
200 EnableWindow(GetDlgItem(hDlg, HOST_NEW), FALSE);
\r
201 EnableWindow(GetDlgItem(hDlg, HOST_FOLDER), FALSE);
\r
202 EnableWindow(GetDlgItem(hDlg, HOST_COPY), FALSE);
\r
203 EnableWindow(GetDlgItem(hDlg, HOST_DEL), FALSE);
\r
204 EnableWindow(GetDlgItem(hDlg, HOST_DOWN), FALSE);
\r
205 EnableWindow(GetDlgItem(hDlg, HOST_UP), FALSE);
\r
207 if(ListFont != NULL)
\r
208 SendDlgItemMessage(hDlg, HOST_LIST, WM_SETFONT, (WPARAM)ListFont, MAKELPARAM(TRUE, 0));
\r
209 hImage = ImageList_LoadBitmap(GetFtpInst(), MAKEINTRESOURCE(hlist_bmp), 16, 8, RGB(255,0,0));
\r
210 SendDlgItemMessage(hDlg, HOST_LIST, TVM_SETIMAGELIST, TVSIL_NORMAL, (LPARAM)hImage);
\r
212 if(ConnectingHost >= 0)
\r
213 CurrentHost = ConnectingHost;
\r
214 SendAllHostNames(GetDlgItem(hDlg, HOST_LIST), CurrentHost);
\r
215 DlgSizeInit(hDlg, &DlgSize, &HostDlgSize);
\r
219 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
222 if((hItem = (HTREEITEM)SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETNEXTITEM, TVGN_CARET, 0)) != NULL)
\r
224 Item.hItem = hItem;
\r
225 Item.mask = TVIF_PARAM;
\r
226 SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETITEM, TVGN_CARET, (LPARAM)&Item);
\r
227 CurrentHost = Item.lParam;
\r
228 ConnectingHost = CurrentHost;
\r
229 AskDlgSize(hDlg, &DlgSize, &HostDlgSize);
\r
230 ImageList_Destroy(hImage);
\r
231 EndDialog(hDlg, YES);
\r
237 AskDlgSize(hDlg, &DlgSize, &HostDlgSize);
\r
238 ImageList_Destroy(hImage);
\r
239 EndDialog(hDlg, NO);
\r
243 CopyDefaultHost(&TmpHost);
\r
244 if(DispHostSetDlg(hDlg) == YES)
\r
246 if((hItem = (HTREEITEM)SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETNEXTITEM, TVGN_CARET, 0)) != NULL)
\r
248 Item.hItem = hItem;
\r
249 Item.mask = TVIF_PARAM;
\r
250 SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETITEM, TVGN_CARET, (LPARAM)&Item);
\r
252 TmpHost.Level = GetNodeLevel(Item.lParam);
\r
253 Level1 = Item.lParam + 1;
\r
254 CurrentHost = Level1;
\r
260 CurrentHost = Hosts;
\r
262 AddHostToList(&TmpHost, Level1, SET_LEVEL_SAME);
\r
263 SendAllHostNames(GetDlgItem(hDlg, HOST_LIST), CurrentHost);
\r
268 CopyDefaultHost(&TmpHost);
\r
269 if(InputDialogBox(group_dlg, hDlg, NULL, TmpHost.HostName, HOST_NAME_LEN+1, &Level1, IDH_HELP_TOPIC_0000001) == YES)
\r
271 if((hItem = (HTREEITEM)SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETNEXTITEM, TVGN_CARET, 0)) != NULL)
\r
273 Item.hItem = hItem;
\r
274 Item.mask = TVIF_PARAM;
\r
275 SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETITEM, TVGN_CARET, (LPARAM)&Item);
\r
277 TmpHost.Level = GetNodeLevel(Item.lParam) | SET_LEVEL_GROUP ;
\r
278 Level1 = Item.lParam + 1;
\r
279 CurrentHost = Level1;
\r
283 TmpHost.Level = 0 | SET_LEVEL_GROUP;
\r
285 CurrentHost = Hosts;
\r
287 AddHostToList(&TmpHost, Level1, SET_LEVEL_SAME);
\r
288 SendAllHostNames(GetDlgItem(hDlg, HOST_LIST), CurrentHost);
\r
293 if((hItem = (HTREEITEM)SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETNEXTITEM, TVGN_CARET, 0)) != NULL)
\r
295 Item.hItem = hItem;
\r
296 Item.mask = TVIF_PARAM;
\r
297 SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETITEM, TVGN_CARET, (LPARAM)&Item);
\r
298 CurrentHost = Item.lParam;
\r
300 CopyHostFromList(CurrentHost, &TmpHost);
\r
301 Level1 = IsNodeGroup(CurrentHost);
\r
302 if(((Level1 == NO) && (DispHostSetDlg(hDlg) == YES)) ||
\r
303 ((Level1 == YES) && (InputDialogBox(group_dlg, hDlg, NULL, TmpHost.HostName, HOST_NAME_LEN+1, &Level1, IDH_HELP_TOPIC_0000001) == YES)))
\r
305 UpdateHostToList(CurrentHost, &TmpHost);
\r
306 SendAllHostNames(GetDlgItem(hDlg, HOST_LIST), CurrentHost);
\r
312 if((hItem = (HTREEITEM)SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETNEXTITEM, TVGN_CARET, 0)) != NULL)
\r
314 Item.hItem = hItem;
\r
315 Item.mask = TVIF_PARAM;
\r
316 SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETITEM, TVGN_CARET, (LPARAM)&Item);
\r
317 CurrentHost = Item.lParam;
\r
319 CopyHostFromList(CurrentHost, &TmpHost);
\r
320 strcpy(TmpHost.BookMark, "\0");
\r
322 AddHostToList(&TmpHost, CurrentHost, SET_LEVEL_SAME);
\r
323 SendAllHostNames(GetDlgItem(hDlg, HOST_LIST), CurrentHost);
\r
328 if((hItem = (HTREEITEM)SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETNEXTITEM, TVGN_CARET, 0)) != NULL)
\r
330 Item.hItem = hItem;
\r
331 Item.mask = TVIF_PARAM;
\r
332 SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETITEM, TVGN_CARET, (LPARAM)&Item);
\r
333 CurrentHost = Item.lParam;
\r
334 Level1 = IsNodeGroup(CurrentHost);
\r
337 // if(((Level1 == YES) && (DialogBox(GetFtpInst(), MAKEINTRESOURCE(groupdel_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)) ||
\r
338 // ((Level1 == NO) && (DialogBox(GetFtpInst(), MAKEINTRESOURCE(hostdel_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)))
\r
339 if(((Level1 == YES) && (DialogBox(GetFtpInst(), MAKEINTRESOURCE(groupdel_dlg), hDlg, ExeEscDialogProc) == YES)) ||
\r
340 ((Level1 == NO) && (DialogBox(GetFtpInst(), MAKEINTRESOURCE(hostdel_dlg), hDlg, ExeEscDialogProc) == YES)))
\r
342 DelHostFromList(CurrentHost);
\r
343 if(CurrentHost >= Hosts)
\r
344 CurrentHost = max1(0, Hosts-1);
\r
345 SendAllHostNames(GetDlgItem(hDlg, HOST_LIST), CurrentHost);
\r
351 if((hItem = (HTREEITEM)SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETNEXTITEM, TVGN_CARET, 0)) != NULL)
\r
353 Item.hItem = hItem;
\r
354 Item.mask = TVIF_PARAM;
\r
355 SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETITEM, TVGN_CARET, (LPARAM)&Item);
\r
356 CurrentHost = Item.lParam;
\r
358 if(CurrentHost > 0)
\r
360 Data1 = HostListTop;
\r
361 for(Level1 = CurrentHost; Level1 > 0; Level1--)
\r
362 Data1 = GetNextNode(Data1);
\r
363 Level1 = GetNodeLevel(CurrentHost);
\r
365 Data2 = HostListTop;
\r
366 for(Level2 = CurrentHost-1; Level2 > 0; Level2--)
\r
367 Data2 = GetNextNode(Data2);
\r
368 Level2 = GetNodeLevel(CurrentHost-1);
\r
370 if((Level1 == Level2) && (Data2->Set.Level & SET_LEVEL_GROUP))
\r
373 if(Data1->Next != NULL)
\r
374 Data1->Next->Prev = Data1->Prev;
\r
375 if(Data1->Prev != NULL)
\r
376 Data1->Prev->Next = Data1->Next;
\r
377 if((Data1->Parent != NULL) && (Data1->Parent->Child == Data1))
\r
378 Data1->Parent->Child = Data1->Next;
\r
379 if((Data1->Parent == NULL) && (HostListTop == Data1))
\r
380 HostListTop = Data1->Next;
\r
382 Data1->Next = Data2->Child;
\r
383 Data1->Prev = NULL;
\r
384 Data1->Parent = Data2;
\r
385 Data2->Child = Data1;
\r
387 else if(Level1 < Level2)
\r
389 //Data1のPrevのChildのNextの末尾へ
\r
390 Data2 = Data1->Prev->Child;
\r
391 while(Data2->Next != NULL)
\r
392 Data2 = Data2->Next;
\r
394 if(Data1->Next != NULL)
\r
395 Data1->Next->Prev = Data1->Prev;
\r
396 if(Data1->Prev != NULL)
\r
397 Data1->Prev->Next = Data1->Next;
\r
398 if((Data1->Parent != NULL) && (Data1->Parent->Child == Data1))
\r
399 Data1->Parent->Child = Data1->Next;
\r
400 if((Data1->Parent == NULL) && (HostListTop == Data1))
\r
401 HostListTop = Data1->Next;
\r
403 Data2->Next = Data1;
\r
404 Data1->Prev = Data2;
\r
405 Data1->Next = NULL;
\r
406 Data1->Parent = Data2->Parent;
\r
411 if(Data1->Next != NULL)
\r
412 Data1->Next->Prev = Data1->Prev;
\r
413 if(Data1->Prev != NULL)
\r
414 Data1->Prev->Next = Data1->Next;
\r
415 if((Data1->Parent != NULL) && (Data1->Parent->Child == Data1))
\r
416 Data1->Parent->Child = Data1->Next;
\r
417 if((Data1->Parent == NULL) && (HostListTop == Data1))
\r
418 HostListTop = Data1->Next;
\r
420 if(Data2->Prev != NULL)
\r
421 Data2->Prev->Next = Data1;
\r
422 Data1->Prev = Data2->Prev;
\r
423 Data2->Prev = Data1;
\r
424 Data1->Next = Data2;
\r
425 Data1->Parent = Data2->Parent;
\r
427 if((Data1->Parent != NULL) && (Data1->Parent->Child == Data2))
\r
428 Data1->Parent->Child = Data1;
\r
429 if((Data1->Parent == NULL) && (HostListTop == Data2))
\r
430 HostListTop = Data1;
\r
433 CurrentHost = GetNodeNumByData(Data1);
\r
434 SendAllHostNames(GetDlgItem(hDlg, HOST_LIST), CurrentHost);
\r
440 if((hItem = (HTREEITEM)SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETNEXTITEM, TVGN_CARET, 0)) != NULL)
\r
442 Item.hItem = hItem;
\r
443 Item.mask = TVIF_PARAM;
\r
444 SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETITEM, TVGN_CARET, (LPARAM)&Item);
\r
445 CurrentHost = Item.lParam;
\r
447 Data1 = HostListTop;
\r
448 for(Level1 = CurrentHost; Level1 > 0; Level1--)
\r
449 Data1 = GetNextNode(Data1);
\r
450 Level1 = GetNodeLevel(CurrentHost);
\r
453 Level2 = SET_LEVEL_SAME;
\r
454 if(CurrentHost < Hosts-1)
\r
456 Data2 = HostListTop;
\r
457 for(Level2 = CurrentHost+1; Level2 > 0; Level2--)
\r
458 Data2 = GetNextNode(Data2);
\r
459 Level2 = GetNodeLevel(CurrentHost+1);
\r
461 if(Level1 < Level2)
\r
463 if(Data1->Next != NULL)
\r
465 //Data2 = Data1のNext
\r
466 Data2 = Data1->Next;
\r
467 Level2 = GetNodeLevelByData(Data2);
\r
469 else if(Data1->Parent != NULL)
\r
472 Level2 = SET_LEVEL_SAME;
\r
477 if(((Data2 == NULL) && (Level1 > 0)) ||
\r
480 //Data1のParentのNextへ
\r
481 Data2 = Data1->Parent;
\r
483 if(Data1->Next != NULL)
\r
484 Data1->Next->Prev = Data1->Prev;
\r
485 if(Data1->Prev != NULL)
\r
486 Data1->Prev->Next = Data1->Next;
\r
487 if((Data1->Parent != NULL) && (Data1->Parent->Child == Data1))
\r
488 Data1->Parent->Child = Data1->Next;
\r
489 if((Data1->Parent == NULL) && (HostListTop == Data1))
\r
490 HostListTop = Data1->Next;
\r
492 if(Data2->Next != NULL)
\r
493 Data2->Next->Prev = Data1;
\r
494 Data1->Next = Data2->Next;
\r
495 Data2->Next = Data1;
\r
496 Data1->Prev = Data2;
\r
497 Data1->Parent = Data2->Parent;
\r
499 if((Data1->Parent != NULL) && (Data1->Parent->Child == Data1))
\r
500 Data1->Parent->Child = Data2;
\r
501 if((Data1->Parent == NULL) && (HostListTop == Data1))
\r
502 HostListTop = Data2;
\r
504 else if(Level1 == Level2)
\r
506 if(Data2->Set.Level & SET_LEVEL_GROUP)
\r
509 if(Data1->Next != NULL)
\r
510 Data1->Next->Prev = Data1->Prev;
\r
511 if(Data1->Prev != NULL)
\r
512 Data1->Prev->Next = Data1->Next;
\r
513 if((Data1->Parent != NULL) && (Data1->Parent->Child == Data1))
\r
514 Data1->Parent->Child = Data1->Next;
\r
515 if((Data1->Parent == NULL) && (HostListTop == Data1))
\r
516 HostListTop = Data1->Next;
\r
518 if(Data2->Child != NULL)
\r
519 Data2->Child->Prev = Data1;
\r
520 Data1->Next = Data2->Child;
\r
521 Data1->Prev = NULL;
\r
522 Data1->Parent = Data2;
\r
523 Data2->Child = Data1;
\r
528 if(Data1->Next != NULL)
\r
529 Data1->Next->Prev = Data1->Prev;
\r
530 if(Data1->Prev != NULL)
\r
531 Data1->Prev->Next = Data1->Next;
\r
532 if((Data1->Parent != NULL) && (Data1->Parent->Child == Data1))
\r
533 Data1->Parent->Child = Data1->Next;
\r
534 if((Data1->Parent == NULL) && (HostListTop == Data1))
\r
535 HostListTop = Data1->Next;
\r
537 if(Data2->Next != NULL)
\r
538 Data2->Next->Prev = Data1;
\r
539 Data1->Next = Data2->Next;
\r
540 Data2->Next = Data1;
\r
541 Data1->Prev = Data2;
\r
542 Data1->Parent = Data2->Parent;
\r
544 if((Data1->Parent != NULL) && (Data1->Parent->Child == Data1))
\r
545 Data1->Parent->Child = Data2;
\r
546 if((Data1->Parent == NULL) && (HostListTop == Data1))
\r
547 HostListTop = Data2;
\r
551 CurrentHost = GetNodeNumByData(Data1);
\r
552 SendAllHostNames(GetDlgItem(hDlg, HOST_LIST), CurrentHost);
\r
557 case HOST_SET_DEFAULT :
\r
558 CopyDefaultHost(&TmpHost);
\r
559 if(DispHostSetDlg(hDlg) == YES)
\r
560 SetDefaultHost(&TmpHost);
\r
564 if(HIWORD(wParam) == LBN_DBLCLK)
\r
565 PostMessage(hDlg, WM_COMMAND, MAKEWORD(IDOK, 0), 0);
\r
569 hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000027);
\r
572 SetFocus(GetDlgItem(hDlg, HOST_LIST));
\r
576 DlgSizeChange(hDlg, &DlgSize, (RECT *)lParam, (int)wParam);
\r
579 case WM_SELECT_HOST :
\r
580 HitInfo.pt.x = LOWORD(lParam);
\r
581 HitInfo.pt.y = HIWORD(lParam);
\r
582 HitInfo.flags = TVHT_ONITEM;
\r
583 hItem = (HTREEITEM)SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETNEXTITEM, TVGN_CARET, 0);
\r
584 HitInfo.hItem = hItem;
\r
585 if((HTREEITEM)SendMessage(GetDlgItem(hDlg, HOST_LIST), TVM_HITTEST, 0, (LPARAM)&HitInfo) == hItem)
\r
587 if(IsWindowEnabled(GetDlgItem(hDlg, IDOK)) == TRUE)
\r
588 PostMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDOK, 0), 0);
\r
594 // tView = (NM_TREEVIEW FAR *)lParam;
\r
595 tView = (NM_TREEVIEWW FAR *)lParam;
\r
596 switch(tView->hdr.idFrom)
\r
599 tViewPos = tView->itemNew.hItem;
\r
600 hItem = tView->itemNew.hItem;
\r
601 switch(tView->hdr.code)
\r
604 // case TVN_SELCHANGED :
\r
605 case TVN_SELCHANGEDW :
\r
606 /* フォルダが選ばれたときは接続、コピーボタンは禁止 */
\r
607 Item.hItem = hItem;
\r
608 Item.mask = TVIF_PARAM;
\r
609 SendDlgItemMessage(hDlg, HOST_LIST, TVM_GETITEM, TVGN_CARET, (LPARAM)&Item);
\r
610 if(IsNodeGroup(Item.lParam) == YES)
\r
612 EnableWindow(GetDlgItem(hDlg, IDOK), FALSE);
\r
613 EnableWindow(GetDlgItem(hDlg, HOST_COPY), FALSE);
\r
617 EnableWindow(GetDlgItem(hDlg, IDOK), TRUE);
\r
618 if(AskConnecting() == NO)
\r
619 EnableWindow(GetDlgItem(hDlg, HOST_COPY), TRUE);
\r
631 /*----- ホスト一覧TreeViewのメッセージ処理 ------------------------------------
\r
634 * HWND hWnd : ウインドウハンドル
\r
635 * UINT message : メッセージ番号
\r
636 * WPARAM wParam : メッセージの WPARAM 引数
\r
637 * LPARAM lParam : メッセージの LPARAM 引数
\r
641 *----------------------------------------------------------------------------*/
\r
643 static LRESULT CALLBACK HostListWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
\r
647 case WM_LBUTTONDBLCLK :
\r
648 PostMessage(GetParent(hWnd), WM_SELECT_HOST, 0, lParam);
\r
651 return(CallWindowProc(HostListProcPtr, hWnd, message, wParam, lParam));
\r
655 /*----- 次の設定番号のノードを返す --------------------------------------------
\r
658 * HOSTLISTDATA *Pos : ノードデータ
\r
661 * HOSTLISTDATA *次のノード
\r
663 *----------------------------------------------------------------------------*/
\r
665 static HOSTLISTDATA *GetNextNode(HOSTLISTDATA *Pos)
\r
670 if(Pos->Child != NULL)
\r
674 if(Pos->Next != NULL)
\r
678 while(Pos->Parent != NULL)
\r
681 if(Pos->Next != NULL)
\r
693 /*----- ノードのレベル数を返す(設定番号指定) --------------------------------
\r
699 * int レベル数 (-1=設定がない)
\r
700 *----------------------------------------------------------------------------*/
\r
702 static int GetNodeLevel(int Num)
\r
708 if((Num >= 0) && (Num < Hosts))
\r
710 Pos = GetNodeByNum(Num);
\r
712 while(Pos->Parent != NULL)
\r
722 /*----- ノードのレベル数を返す(ノードデータ指定)-----------------------------
\r
725 * HOSTLISTDATA *Data : 設定値
\r
729 *----------------------------------------------------------------------------*/
\r
731 static int GetNodeLevelByData(HOSTLISTDATA *Data)
\r
736 while(Data->Parent != NULL)
\r
738 Data = Data->Parent;
\r
745 /*----- ノードの設定番号を返す ------------------------------------------------
\r
748 * HOSTLISTDATA *Data : 設定値
\r
752 *----------------------------------------------------------------------------*/
\r
754 static int GetNodeNumByData(HOSTLISTDATA *Data)
\r
763 Pos = GetNextNode(Pos);
\r
770 /*----- 指定番号のノードを返す ------------------------------------------------
\r
776 * HOSTLISTDATA * : 設定値
\r
777 *----------------------------------------------------------------------------*/
\r
779 static HOSTLISTDATA *GetNodeByNum(int Num)
\r
784 for(; Num > 0; Num--)
\r
785 Pos = GetNextNode(Pos);
\r
791 /*----- 設定値リストの各ノードのレベル番号をセット ----------------------------
\r
797 * HOSTLISTDATA * : 設定値
\r
798 *----------------------------------------------------------------------------*/
\r
800 static int SetNodeLevelAll(void)
\r
806 for(i = 0; i < Hosts; i++)
\r
808 Pos->Set.Level &= ~SET_LEVEL_MASK;
\r
809 Pos->Set.Level |= GetNodeLevelByData(Pos);
\r
810 Pos = GetNextNode(Pos);
\r
812 return(FFFTP_SUCCESS);
\r
816 /*----- 設定値リストに追加 ----------------------------------------------------
\r
819 * HOSTDATA *Set : 追加する設定値
\r
820 * int Pos : 追加する位置 (0~ : -1=最後)
\r
821 * int Level : レベル数 (SET_LEVEL_SAME=追加位置のものと同レベル)
\r
825 * FFFTP_SUCCESS/FFFTP_FAIL
\r
826 *----------------------------------------------------------------------------*/
\r
828 int AddHostToList(HOSTDATA *Set, int Pos, int Level)
\r
832 HOSTLISTDATA *Last;
\r
836 if((Pos >= -1) && (Pos <= Hosts))
\r
840 Level &= SET_LEVEL_MASK;
\r
842 if((New = malloc(sizeof(HOSTLISTDATA))) != NULL)
\r
844 memcpy(&New->Set, Set, sizeof(HOSTDATA));
\r
848 New->Parent = NULL;
\r
850 if(HostListTop == NULL)
\r
859 New->Next = HostListTop;
\r
864 Cur = GetNodeLevel(Pos-1);
\r
865 Last = HostListTop;
\r
866 for(Pos--; Pos > 0; Pos--)
\r
867 Last = GetNextNode(Last);
\r
868 if((Level != SET_LEVEL_SAME) && (Level > Cur))
\r
870 New->Next = Last->Child;
\r
871 New->Parent = Last;
\r
873 if(New->Next != NULL)
\r
874 New->Next->Prev = New;
\r
878 if((Level >= 0) && (Level < SET_LEVEL_SAME))
\r
880 for(; Level < Cur; Cur--)
\r
881 Last = Last->Parent;
\r
884 New->Next = Last->Next;
\r
885 New->Parent = Last->Parent;
\r
887 if(New->Next != NULL)
\r
888 New->Next->Prev = New;
\r
893 Sts = FFFTP_SUCCESS;
\r
900 /*----- 設定値リストを更新する ------------------------------------------------
\r
904 * HOSTDATA *Set : 設定値をコピーするワーク
\r
908 * FFFTP_SUCCESS/FFFTP_FAIL
\r
909 *----------------------------------------------------------------------------*/
\r
911 static int UpdateHostToList(int Num, HOSTDATA *Set)
\r
917 if((Num >= 0) && (Num < Hosts))
\r
919 Pos = GetNodeByNum(Num);
\r
920 memcpy(&Pos->Set, Set, sizeof(HOSTDATA));
\r
921 Sts = FFFTP_SUCCESS;
\r
927 /*----- 設定値リストから削除 --------------------------------------------------
\r
934 * FFFTP_SUCCESS/FFFTP_FAIL
\r
935 *----------------------------------------------------------------------------*/
\r
937 static int DelHostFromList(int Num)
\r
943 if((Num >= 0) && (Num < Hosts))
\r
948 if(Pos->Child != NULL)
\r
949 DeleteChildAndNext(Pos->Child);
\r
950 HostListTop = Pos->Next;
\r
954 Pos = GetNodeByNum(Num);
\r
955 if(Pos->Child != NULL)
\r
956 DeleteChildAndNext(Pos->Child);
\r
958 if(Pos->Next != NULL)
\r
959 Pos->Next->Prev = Pos->Prev;
\r
960 if(Pos->Prev != NULL)
\r
961 Pos->Prev->Next = Pos->Next;
\r
962 if((Pos->Parent != NULL) && (Pos->Parent->Child == Pos))
\r
963 Pos->Parent->Child = Pos->Next;
\r
967 Sts = FFFTP_SUCCESS;
\r
973 /*----- 設定値リストからノードデータを削除 ------------------------------------
\r
976 * HOSTLISTDATA *Pos : 削除するノード
\r
980 * FFFTP_SUCCESS/FFFTP_FAIL
\r
983 * Pos->Next, Pos->Childの全てのノードを削除する
\r
984 *----------------------------------------------------------------------------*/
\r
986 static int DeleteChildAndNext(HOSTLISTDATA *Pos)
\r
988 HOSTLISTDATA *Next;
\r
992 if(Pos->Child != NULL)
\r
993 DeleteChildAndNext(Pos->Child);
\r
1000 return(FFFTP_SUCCESS);
\r
1004 /*----- 設定値リストから設定値を取り出す --------------------------------------
\r
1007 * int Num : 設定値号番号
\r
1008 * HOSTDATA *Set : 設定値をコピーするワーク
\r
1012 * FFFTP_SUCCESS/FFFTP_FAIL
\r
1015 * 現在ホストに接続中の時は、CopyHostFromListInConnect() を使う事
\r
1016 *----------------------------------------------------------------------------*/
\r
1018 int CopyHostFromList(int Num, HOSTDATA *Set)
\r
1021 HOSTLISTDATA *Pos;
\r
1024 if((Num >= 0) && (Num < Hosts))
\r
1026 Pos = GetNodeByNum(Num);
\r
1027 memcpy(Set, &Pos->Set, sizeof(HOSTDATA));
\r
1028 Sts = FFFTP_SUCCESS;
\r
1034 /*----- 設定値リストから設定値を取り出す --------------------------------------
\r
1037 * int Num : 設定値号番号
\r
1038 * HOSTDATA *Set : 設定値をコピーするワーク
\r
1042 * FFFTP_SUCCESS/FFFTP_FAIL
\r
1046 *----------------------------------------------------------------------------*/
\r
1048 int CopyHostFromListInConnect(int Num, HOSTDATA *Set)
\r
1051 HOSTLISTDATA *Pos;
\r
1054 if((Num >= 0) && (Num < Hosts))
\r
1056 Pos = GetNodeByNum(Num);
\r
1057 strcpy(Set->ChmodCmd, Pos->Set.ChmodCmd);
\r
1058 Set->Port = Pos->Set.Port;
\r
1059 Set->Anonymous = Pos->Set.Anonymous;
\r
1060 Set->KanjiCode = Pos->Set.KanjiCode;
\r
1061 Set->KanaCnv = Pos->Set.KanaCnv;
\r
1062 Set->NameKanjiCode = Pos->Set.NameKanjiCode;
\r
1063 Set->NameKanaCnv = Pos->Set.NameKanaCnv;
\r
1064 Set->Pasv = Pos->Set.Pasv;
\r
1065 Set->FireWall = Pos->Set.FireWall;
\r
1066 Set->ListCmdOnly = Pos->Set.ListCmdOnly;
\r
1067 Set->UseNLST_R = Pos->Set.UseNLST_R;
\r
1068 Set->LastDir = Pos->Set.LastDir;
\r
1069 Set->TimeZone = Pos->Set.TimeZone;
\r
1071 Set->UseNoEncryption = Pos->Set.UseNoEncryption;
\r
1072 Set->UseFTPES = Pos->Set.UseFTPES;
\r
1073 Set->UseFTPIS = Pos->Set.UseFTPIS;
\r
1074 Set->UseSFTP = Pos->Set.UseSFTP;
\r
1075 strcpy(Set->PrivateKey, Pos->Set.PrivateKey);
\r
1076 Set->NoWeakEncryption = Pos->Set.NoWeakEncryption;
\r
1078 Set->MaxThreadCount = Pos->Set.MaxThreadCount;
\r
1079 Set->ReuseCmdSkt = Pos->Set.ReuseCmdSkt;
\r
1081 Set->UseMLSD = Pos->Set.UseMLSD;
\r
1083 Set->NetType = Pos->Set.NetType;
\r
1085 Set->NoopInterval = Pos->Set.NoopInterval;
\r
1087 Set->TransferErrorMode = Pos->Set.TransferErrorMode;
\r
1088 Set->TransferErrorNotify = Pos->Set.TransferErrorNotify;
\r
1089 // セッションあたりの転送量制限対策
\r
1090 Set->TransferErrorReconnect = Pos->Set.TransferErrorReconnect;
\r
1092 Set->NoPasvAdrs = Pos->Set.NoPasvAdrs;
\r
1093 Sts = FFFTP_SUCCESS;
\r
1099 /*----- 設定値リストのブックマークを更新 --------------------------------------
\r
1102 * int Num : 設定値号番号
\r
1103 * char *Bmask : ブックマーク文字列
\r
1104 * int Len : ブックマーク文字列の長さ
\r
1108 * FFFTP_SUCCESS/FFFTP_FAIL
\r
1109 *----------------------------------------------------------------------------*/
\r
1111 int SetHostBookMark(int Num, char *Bmask, int Len)
\r
1114 HOSTLISTDATA *Pos;
\r
1117 if((Num >= 0) && (Num < Hosts))
\r
1119 Pos = GetNodeByNum(Num);
\r
1120 memcpy(Pos->Set.BookMark, Bmask, Len);
\r
1121 Sts = FFFTP_SUCCESS;
\r
1127 /*----- 設定値リストのブックマーク文字列を返す --------------------------------
\r
1130 * int Num : 設定値号番号
\r
1134 *----------------------------------------------------------------------------*/
\r
1136 char *AskHostBookMark(int Num)
\r
1139 HOSTLISTDATA *Pos;
\r
1142 if((Num >= 0) && (Num < Hosts))
\r
1144 Pos = GetNodeByNum(Num);
\r
1145 Ret = Pos->Set.BookMark;
\r
1151 /*----- 設定値リストのディレクトリを更新 --------------------------------------
\r
1154 * int Num : 設定値号番号
\r
1155 * char *LocDir : ローカルのディレクトリ
\r
1156 * char *HostDir : ホストのディレクトリ
\r
1160 * FFFTP_SUCCESS/FFFTP_FAIL
\r
1161 *----------------------------------------------------------------------------*/
\r
1163 int SetHostDir(int Num, char *LocDir, char *HostDir)
\r
1166 HOSTLISTDATA *Pos;
\r
1169 if((Num >= 0) && (Num < Hosts))
\r
1171 Pos = GetNodeByNum(Num);
\r
1172 strcpy(Pos->Set.LocalInitDir, LocDir);
\r
1173 strcpy(Pos->Set.RemoteInitDir, HostDir);
\r
1174 Sts = FFFTP_SUCCESS;
\r
1180 /*----- 設定値リストのパスワードを更新 ----------------------------------------
\r
1183 * int Num : 設定値号番号
\r
1184 * char *Pass : パスワード
\r
1188 * FFFTP_SUCCESS/FFFTP_FAIL
\r
1189 *----------------------------------------------------------------------------*/
\r
1191 int SetHostPassword(int Num, char *Pass)
\r
1194 HOSTLISTDATA *Pos;
\r
1197 if((Num >= 0) && (Num < Hosts))
\r
1199 Pos = GetNodeByNum(Num);
\r
1200 strcpy(Pos->Set.PassWord, Pass);
\r
1201 Sts = FFFTP_SUCCESS;
\r
1207 /*----- 指定の設定名を持つ設定の番号を返す ------------------------------------
\r
1210 * char *Name : 設定名
\r
1215 *----------------------------------------------------------------------------*/
\r
1217 int SearchHostName(char *Name)
\r
1221 HOSTLISTDATA *Pos;
\r
1224 Pos = HostListTop;
\r
1225 for(i = 0; i < Hosts; i++)
\r
1227 if(strcmp(Name, Pos->Set.HostName) == 0)
\r
1232 Pos = GetNextNode(Pos);
\r
1238 /*----- 設定値リストのソート方法を更新 ----------------------------------------
\r
1241 * int Num : 設定値号番号
\r
1242 * int LFSort : ローカルのファイルのソート方法
\r
1243 * int LDSort : ローカルのフォルダのソート方法
\r
1244 * int RFSort : リモートのファイルのソート方法
\r
1245 * int RDSort : リモートのフォルダのソート方法
\r
1249 * FFFTP_SUCCESS/FFFTP_FAIL
\r
1250 *----------------------------------------------------------------------------*/
\r
1252 int SetHostSort(int Num, int LFSort, int LDSort, int RFSort, int RDSort)
\r
1255 HOSTLISTDATA *Pos;
\r
1258 if((Num >= 0) && (Num < Hosts))
\r
1260 Pos = GetNodeByNum(Num);
\r
1261 Pos->Set.Sort = LFSort * 0x1000000 | LDSort * 0x10000 | RFSort * 0x100 | RDSort;
\r
1262 Sts = FFFTP_SUCCESS;
\r
1268 /*----- 登録されているソート方法を分解する ------------------------------------
\r
1271 * ulong Sort : ソート方法
\r
1272 * int *LFSort : ローカルのファイルのソート方法を格納するワーク
\r
1273 * int *LDSort : ローカルのフォルダのソート方法を格納するワーク
\r
1274 * int *RFSort : リモートのファイルのソート方法を格納するワーク
\r
1275 * int *RDSort : リモートのフォルダのソート方法を格納するワーク
\r
1279 *----------------------------------------------------------------------------*/
\r
1281 void DecomposeSortType(ulong Sort, int *LFSort, int *LDSort, int *RFSort, int *RDSort)
\r
1283 *LFSort = (int)((Sort / 0x1000000) & 0xFF);
\r
1284 *LDSort = (int)((Sort / 0x10000) & 0xFF);
\r
1285 *RFSort = (int)((Sort / 0x100) & 0xFF);
\r
1286 *RDSort = (int)(Sort & 0xFF);
\r
1291 /*----- 現在接続中の設定番号を返す --------------------------------------------
\r
1298 *----------------------------------------------------------------------------*/
\r
1300 int AskCurrentHost(void)
\r
1302 return(ConnectingHost);
\r
1306 /*----- 現在接続中の設定番号をセットする --------------------------------------
\r
1313 *----------------------------------------------------------------------------*/
\r
1315 void SetCurrentHost(int Num)
\r
1317 ConnectingHost = Num;
\r
1322 /*----- デフォルト設定値を取り出す --------------------------------------------
\r
1325 * HOSTDATA *Set : 設定値をコピーするワーク
\r
1329 *----------------------------------------------------------------------------*/
\r
1331 void CopyDefaultHost(HOSTDATA *Set)
\r
1334 // Set->Level = 0;
\r
1335 // strcpy(Set->HostName, "");
\r
1336 // strcpy(Set->HostAdrs, "");
\r
1337 // strcpy(Set->UserName, "");
\r
1338 // strcpy(Set->PassWord, "");
\r
1339 // strcpy(Set->Account, "");
\r
1340 // strcpy(Set->LocalInitDir, DefaultLocalPath);
\r
1341 // strcpy(Set->RemoteInitDir, "");
\r
1342 // memcpy(Set->BookMark, "\0\0", 2);
\r
1343 // strcpy(Set->ChmodCmd, CHMOD_CMD_NOR);
\r
1344 // strcpy(Set->LsName, LS_FNAME);
\r
1345 // strcpy(Set->InitCmd, "");
\r
1346 // Set->Port = PORT_NOR;
\r
1347 // Set->Anonymous = NO;
\r
1348 // Set->KanjiCode = KANJI_NOCNV;
\r
1349 // Set->KanaCnv = YES;
\r
1350 // Set->NameKanjiCode = KANJI_NOCNV;
\r
1351 // Set->NameKanaCnv = NO;
\r
1352 // Set->Pasv = YES;
\r
1353 // Set->FireWall = NO;
\r
1354 // Set->ListCmdOnly = YES;
\r
1355 // Set->UseNLST_R = YES;
\r
1356 // Set->LastDir = NO;
\r
1357 // Set->TimeZone = 9; /* GMT+9 (JST) */
\r
1358 // Set->HostType = HTYPE_AUTO;
\r
1359 // Set->SyncMove = NO;
\r
1360 // Set->NoFullPath = NO;
\r
1361 // Set->Sort = SORT_NOTSAVED;
\r
1362 // Set->Security = SECURITY_AUTO;
\r
1363 // Set->Dialup = NO;
\r
1364 // Set->DialupAlways = NO;
\r
1365 // Set->DialupNotify = YES;
\r
1366 // strcpy(Set->DialEntry, "");
\r
1367 memcpy(Set, &DefaultHost, sizeof(HOSTDATA));
\r
1373 void ResetDefaultHost(void)
\r
1375 CopyDefaultDefaultHost(&DefaultHost);
\r
1379 void SetDefaultHost(HOSTDATA *Set)
\r
1381 memcpy(&DefaultHost, Set, sizeof(HOSTDATA));
\r
1385 void CopyDefaultDefaultHost(HOSTDATA *Set)
\r
1388 TIME_ZONE_INFORMATION tzi;
\r
1390 strcpy(Set->HostName, "");
\r
1391 strcpy(Set->HostAdrs, "");
\r
1392 strcpy(Set->UserName, "");
\r
1393 strcpy(Set->PassWord, "");
\r
1394 strcpy(Set->Account, "");
\r
1395 strcpy(Set->LocalInitDir, DefaultLocalPath);
\r
1396 strcpy(Set->RemoteInitDir, "");
\r
1397 memcpy(Set->BookMark, "\0\0", 2);
\r
1398 strcpy(Set->ChmodCmd, CHMOD_CMD_NOR);
\r
1399 strcpy(Set->LsName, LS_FNAME);
\r
1400 strcpy(Set->InitCmd, "");
\r
1401 Set->Port = PORT_NOR;
\r
1402 Set->Anonymous = NO;
\r
1403 Set->KanjiCode = KANJI_NOCNV;
\r
1404 Set->KanaCnv = YES;
\r
1405 Set->NameKanjiCode = KANJI_NOCNV;
\r
1407 Set->CurNameKanjiCode = KANJI_NOCNV;
\r
1408 Set->NameKanaCnv = NO;
\r
1410 Set->FireWall = NO;
\r
1411 Set->ListCmdOnly = YES;
\r
1412 Set->UseNLST_R = YES;
\r
1413 Set->LastDir = NO;
\r
1415 // Set->TimeZone = 9; /* GMT+9 (JST) */
\r
1416 GetTimeZoneInformation(&tzi);
\r
1417 Set->TimeZone = (int)(tzi.Bias / -60);
\r
1418 Set->HostType = HTYPE_AUTO;
\r
1419 Set->SyncMove = NO;
\r
1420 Set->NoFullPath = NO;
\r
1421 Set->Sort = SORT_NOTSAVED;
\r
1422 Set->Security = SECURITY_AUTO;
\r
1424 Set->DialupAlways = NO;
\r
1425 Set->DialupNotify = YES;
\r
1426 strcpy(Set->DialEntry, "");
\r
1428 Set->CryptMode = CRYPT_NONE;
\r
1429 Set->UseNoEncryption = YES;
\r
1430 Set->UseFTPES = YES;
\r
1431 Set->UseFTPIS = YES;
\r
1432 Set->UseSFTP = YES;
\r
1433 strcpy(Set->PrivateKey, "");
\r
1434 Set->NoWeakEncryption = YES;
\r
1436 Set->MaxThreadCount = 1;
\r
1437 Set->ReuseCmdSkt = YES;
\r
1438 Set->NoDisplayUI = NO;
\r
1441 Set->UseMLSD = YES;
\r
1443 Set->NetType = NTYPE_AUTO;
\r
1444 Set->CurNetType = NTYPE_AUTO;
\r
1446 Set->NoopInterval = 60;
\r
1448 Set->TransferErrorMode = EXIST_OVW;
\r
1449 Set->TransferErrorNotify = YES;
\r
1450 // セッションあたりの転送量制限対策
\r
1451 Set->TransferErrorReconnect = YES;
\r
1453 Set->NoPasvAdrs = YES;
\r
1457 /*----- 設定名一覧をウィンドウに送る ------------------------------------------
\r
1460 * HWND hWnd : ウインドウハンドル
\r
1465 *----------------------------------------------------------------------------*/
\r
1467 static void SendAllHostNames(HWND hWnd, int Cur)
\r
1470 HOSTLISTDATA *Pos;
\r
1471 TV_INSERTSTRUCT tvIns;
\r
1473 HTREEITEM hItemCur;
\r
1480 SendMessage(hWnd, WM_SETREDRAW, (WPARAM)FALSE, 0);
\r
1482 SendMessage(hWnd, TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT); /* 全てを削除 */
\r
1484 if((Level = malloc(sizeof(HTREEITEM*) * Hosts + 1)) != NULL)
\r
1486 Pos = HostListTop;
\r
1487 for(i = 0; i < Hosts; i++)
\r
1489 if(Pos->Set.Level & SET_LEVEL_GROUP)
\r
1491 tvIns.item.iImage = 0;
\r
1492 tvIns.item.iSelectedImage = 0;
\r
1496 tvIns.item.iImage = 2;
\r
1497 tvIns.item.iSelectedImage = 2;
\r
1500 CurLevel = GetNodeLevel(i);
\r
1502 tvIns.hParent = TVI_ROOT;
\r
1504 tvIns.hParent = Level[CurLevel - 1];
\r
1506 tvIns.hInsertAfter = TVI_LAST;
\r
1507 tvIns.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_CHILDREN;
\r
1508 // tvIns.item.hItem = 0;
\r
1509 // tvIns.item.state = 0;
\r
1510 // tvIns.item.stateMask = 0;
\r
1511 tvIns.item.pszText = Pos->Set.HostName;
\r
1512 tvIns.item.cchTextMax = 0;
\r
1513 tvIns.item.cChildren = 1;
\r
1514 tvIns.item.lParam = i;
\r
1515 hItem = (HTREEITEM)SendMessage(hWnd, TVM_INSERTITEM, 0, (LPARAM)&tvIns);
\r
1517 if(Pos->Set.Level & SET_LEVEL_GROUP)
\r
1518 Level[CurLevel] = hItem;
\r
1520 // DoPrintf("%d = %x", i, hItem);
\r
1525 Pos = GetNextNode(Pos);
\r
1531 SendMessage(hWnd, WM_SETREDRAW, (WPARAM)TRUE, 0);
\r
1533 if(hItemCur != NULL)
\r
1535 SendMessage(hWnd, TVM_SELECTITEM, TVGN_CARET, (LPARAM)hItemCur);
\r
1536 // SendMessage(hWnd, TVM_ENSUREVISIBLE, 0, (LPARAM)hItemCur);
\r
1538 UpdateWindow(hWnd);
\r
1544 /*----- 設定値がグループかどうかを返す ----------------------------------------
\r
1547 * int Num : 設定値号番号
\r
1551 * YES/NO/-1=設定値がない
\r
1552 *----------------------------------------------------------------------------*/
\r
1554 static int IsNodeGroup(int Num)
\r
1557 HOSTLISTDATA *Pos;
\r
1560 if((Num >= 0) && (Num < Hosts))
\r
1562 Pos = GetNodeByNum(Num);
\r
1563 Ret = (Pos->Set.Level & SET_LEVEL_GROUP) ? YES : NO;
\r
1569 /*----- WS_FTP.INIからのインポート --------------------------------------------
\r
1576 *----------------------------------------------------------------------------*/
\r
1578 void ImportFromWSFTP(void)
\r
1581 char Buf[FMAX_PATH+1];
\r
1585 strcpy(Buf, "WS_FTP.INI");
\r
1586 if(SelectFile(GetMainHwnd(), Buf, MSGJPN126, MSGJPN276, NULL, OFN_FILEMUSTEXIST, 0) == TRUE)
\r
1588 if((Strm = fopen(Buf, "rt")) != NULL)
\r
1591 while(fgets(Buf, FMAX_PATH, Strm) != NULL)
\r
1597 AddHostToList(&Host, -1, 0);
\r
1600 if(_stricmp(Buf, "[_config_]\n") != 0)
\r
1602 CopyDefaultHost(&Host);
\r
1604 *(Buf + strlen(Buf) - 2) = NUL;
\r
1605 memset(Host.HostName, NUL, HOST_NAME_LEN+1);
\r
1606 strncpy(Host.HostName, Buf+1, HOST_NAME_LEN);
\r
1610 else if(InHost == YES)
\r
1612 FormatIniString(Buf);
\r
1614 if(_strnicmp(Buf, "HOST=", 5) == 0)
\r
1616 memset(Host.HostAdrs, NUL, HOST_ADRS_LEN+1);
\r
1617 strncpy(Host.HostAdrs, Buf+5, HOST_ADRS_LEN);
\r
1619 else if(_strnicmp(Buf, "UID=", 4) == 0)
\r
1621 memset(Host.UserName, NUL, USER_NAME_LEN+1);
\r
1622 strncpy(Host.UserName, Buf+4, USER_NAME_LEN);
\r
1623 if(strcmp(Host.UserName, "anonymous") == 0)
\r
1624 strcpy(Host.PassWord, UserMailAdrs);
\r
1626 else if(_strnicmp(Buf, "LOCDIR=", 7) == 0)
\r
1628 memset(Host.LocalInitDir, NUL, INIT_DIR_LEN+1);
\r
1629 strncpy(Host.LocalInitDir, Buf+7, INIT_DIR_LEN);
\r
1631 else if(_strnicmp(Buf, "DIR=", 4) == 0)
\r
1633 memset(Host.RemoteInitDir, NUL, INIT_DIR_LEN+1);
\r
1634 strncpy(Host.RemoteInitDir, Buf+4, INIT_DIR_LEN);
\r
1636 else if(_strnicmp(Buf, "PASVMODE=", 9) == 0)
\r
1637 Host.Pasv = (atoi(Buf+9) == 0) ? 0 : 1;
\r
1638 else if(_strnicmp(Buf, "FIREWALL=", 9) == 0)
\r
1639 Host.FireWall = (atoi(Buf+9) == 0) ? 0 : 1;
\r
1644 AddHostToList(&Host, -1, 0);
\r
1653 /*----- ホスト設定のプロパティシート ------------------------------------------
\r
1656 * HWND hDlg : 親ウインドウのハンドル
\r
1660 *----------------------------------------------------------------------------*/
\r
1662 static int DispHostSetDlg(HWND hDlg)
\r
1664 // SFTP、FTPES、FTPIS対応
\r
1666 // PROPSHEETPAGE psp[5];
\r
1667 PROPSHEETPAGE psp[7];
\r
1668 PROPSHEETHEADER psh;
\r
1671 memset(&psp, 0, sizeof(psp));
\r
1672 memset(&psh, 0, sizeof(psh));
\r
1674 psp[0].dwSize = sizeof(PROPSHEETPAGE);
\r
1675 psp[0].dwFlags = PSP_USETITLE | PSP_HASHELP;
\r
1676 psp[0].hInstance = GetFtpInst();
\r
1677 psp[0].pszTemplate = MAKEINTRESOURCE(hset_main_dlg);
\r
1678 psp[0].pszIcon = NULL;
\r
1679 psp[0].pfnDlgProc = MainSettingProc;
\r
1680 psp[0].pszTitle = MSGJPN127;
\r
1681 psp[0].lParam = 0;
\r
1682 psp[0].pfnCallback = NULL;
\r
1684 psp[1].dwSize = sizeof(PROPSHEETPAGE);
\r
1685 psp[1].dwFlags = PSP_USETITLE | PSP_HASHELP;
\r
1686 psp[1].hInstance = GetFtpInst();
\r
1687 psp[1].pszTemplate = MAKEINTRESOURCE(hset_adv_dlg);
\r
1688 psp[1].pszIcon = NULL;
\r
1689 psp[1].pfnDlgProc = AdvSettingProc;
\r
1690 psp[1].pszTitle = MSGJPN128;
\r
1691 psp[1].lParam = 0;
\r
1692 psp[1].pfnCallback = NULL;
\r
1694 psp[2].dwSize = sizeof(PROPSHEETPAGE);
\r
1695 psp[2].dwFlags = PSP_USETITLE | PSP_HASHELP;
\r
1696 psp[2].hInstance = GetFtpInst();
\r
1697 psp[2].pszTemplate = MAKEINTRESOURCE(hset_code_dlg);
\r
1698 psp[2].pszIcon = NULL;
\r
1699 psp[2].pfnDlgProc = CodeSettingProc;
\r
1700 psp[2].pszTitle = MSGJPN129;
\r
1701 psp[2].lParam = 0;
\r
1702 psp[2].pfnCallback = NULL;
\r
1704 psp[3].dwSize = sizeof(PROPSHEETPAGE);
\r
1705 psp[3].dwFlags = PSP_USETITLE | PSP_HASHELP;
\r
1706 psp[3].hInstance = GetFtpInst();
\r
1707 psp[3].pszTemplate = MAKEINTRESOURCE(hset_dialup_dlg);
\r
1708 psp[3].pszIcon = NULL;
\r
1709 psp[3].pfnDlgProc = DialupSettingProc;
\r
1710 psp[3].pszTitle = MSGJPN130;
\r
1711 psp[3].lParam = 0;
\r
1712 psp[3].pfnCallback = NULL;
\r
1714 psp[4].dwSize = sizeof(PROPSHEETPAGE);
\r
1715 psp[4].dwFlags = PSP_USETITLE | PSP_HASHELP;
\r
1716 psp[4].hInstance = GetFtpInst();
\r
1717 psp[4].pszTemplate = MAKEINTRESOURCE(hset_adv2_dlg);
\r
1718 psp[4].pszIcon = NULL;
\r
1719 psp[4].pfnDlgProc = Adv2SettingProc;
\r
1720 psp[4].pszTitle = MSGJPN131;
\r
1721 psp[4].lParam = 0;
\r
1722 psp[4].pfnCallback = NULL;
\r
1724 // SFTP、FTPES、FTPIS対応
\r
1725 psp[5].dwSize = sizeof(PROPSHEETPAGE);
\r
1726 psp[5].dwFlags = PSP_USETITLE | PSP_HASHELP;
\r
1727 psp[5].hInstance = GetFtpInst();
\r
1728 psp[5].pszTemplate = MAKEINTRESOURCE(hset_crypt_dlg);
\r
1729 psp[5].pszIcon = NULL;
\r
1730 psp[5].pfnDlgProc = CryptSettingProc;
\r
1731 psp[5].pszTitle = MSGJPN313;
\r
1732 psp[5].lParam = 0;
\r
1733 psp[5].pfnCallback = NULL;
\r
1736 psp[6].dwSize = sizeof(PROPSHEETPAGE);
\r
1737 psp[6].dwFlags = PSP_USETITLE | PSP_HASHELP;
\r
1738 psp[6].hInstance = GetFtpInst();
\r
1739 psp[6].pszTemplate = MAKEINTRESOURCE(hset_adv3_dlg);
\r
1740 psp[6].pszIcon = NULL;
\r
1741 psp[6].pfnDlgProc = Adv3SettingProc;
\r
1742 psp[6].pszTitle = MSGJPN320;
\r
1743 psp[6].lParam = 0;
\r
1744 psp[6].pfnCallback = NULL;
\r
1746 psh.dwSize = sizeof(PROPSHEETHEADER);
\r
1747 psh.dwFlags = PSH_HASHELP | PSH_NOAPPLYNOW | PSH_PROPSHEETPAGE;
\r
1748 psh.hwndParent = hDlg;
\r
1749 psh.hInstance = GetFtpInst();
\r
1750 psh.pszIcon = NULL;
\r
1751 psh.pszCaption = MSGJPN132;
\r
1752 psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
\r
1753 psh.nStartPage = 0;
\r
1754 psh.ppsp = (LPCPROPSHEETPAGE)&psp;
\r
1755 psh.pfnCallback = NULL;
\r
1758 PropertySheet(&psh);
\r
1764 /*----- 基本設定ウインドウのコールバック --------------------------------------
\r
1767 * HWND hDlg : ウインドウハンドル
\r
1768 * UINT message : メッセージ番号
\r
1769 * WPARAM wParam : メッセージの WPARAM 引数
\r
1770 * LPARAM lParam : メッセージの LPARAM 引数
\r
1774 *----------------------------------------------------------------------------*/
\r
1777 //static BOOL CALLBACK MainSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
1778 static INT_PTR CALLBACK MainSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
1783 char Tmp[FMAX_PATH+1];
\r
1788 case WM_INITDIALOG :
\r
1790 ProtectAllEditControls(hDlg);
\r
1791 SendDlgItemMessage(hDlg, HSET_HOST, EM_LIMITTEXT, HOST_NAME_LEN, 0);
\r
1792 SendDlgItemMessage(hDlg, HSET_ADRS, EM_LIMITTEXT, HOST_ADRS_LEN, 0);
\r
1793 SendDlgItemMessage(hDlg, HSET_USER, EM_LIMITTEXT, USER_NAME_LEN, 0);
\r
1794 SendDlgItemMessage(hDlg, HSET_PASS, EM_LIMITTEXT, PASSWORD_LEN, 0);
\r
1795 SendDlgItemMessage(hDlg, HSET_LOCAL, EM_LIMITTEXT, INIT_DIR_LEN, 0);
\r
1796 SendDlgItemMessage(hDlg, HSET_REMOTE, EM_LIMITTEXT, INIT_DIR_LEN, 0);
\r
1797 SendDlgItemMessage(hDlg, HSET_HOST, WM_SETTEXT, 0, (LPARAM)TmpHost.HostName);
\r
1798 SendDlgItemMessage(hDlg, HSET_ADRS, WM_SETTEXT, 0, (LPARAM)TmpHost.HostAdrs);
\r
1799 SendDlgItemMessage(hDlg, HSET_USER, WM_SETTEXT, 0, (LPARAM)TmpHost.UserName);
\r
1800 SendDlgItemMessage(hDlg, HSET_PASS, WM_SETTEXT, 0, (LPARAM)TmpHost.PassWord);
\r
1801 SendDlgItemMessage(hDlg, HSET_LOCAL, WM_SETTEXT, 0, (LPARAM)TmpHost.LocalInitDir);
\r
1802 SendDlgItemMessage(hDlg, HSET_REMOTE, WM_SETTEXT, 0, (LPARAM)TmpHost.RemoteInitDir);
\r
1803 SendDlgItemMessage(hDlg, HSET_ANONYMOUS, BM_SETCHECK, TmpHost.Anonymous, 0);
\r
1804 SendDlgItemMessage(hDlg, HSET_LASTDIR, BM_SETCHECK, TmpHost.LastDir, 0);
\r
1805 if(AskConnecting() == NO)
\r
1806 EnableWindow(GetDlgItem(hDlg, HSET_REMOTE_CUR), FALSE);
\r
1810 pnmhdr = (NMHDR FAR *)lParam;
\r
1811 switch(pnmhdr->code)
\r
1814 SendDlgItemMessage(hDlg, HSET_HOST, WM_GETTEXT, HOST_NAME_LEN+1, (LPARAM)TmpHost.HostName);
\r
1815 SendDlgItemMessage(hDlg, HSET_ADRS, WM_GETTEXT, HOST_ADRS_LEN+1, (LPARAM)TmpHost.HostAdrs);
\r
1816 RemoveTailingSpaces(TmpHost.HostAdrs);
\r
1817 SendDlgItemMessage(hDlg, HSET_USER, WM_GETTEXT, USER_NAME_LEN+1, (LPARAM)TmpHost.UserName);
\r
1818 SendDlgItemMessage(hDlg, HSET_PASS, WM_GETTEXT, PASSWORD_LEN+1, (LPARAM)TmpHost.PassWord);
\r
1819 SendDlgItemMessage(hDlg, HSET_LOCAL, WM_GETTEXT, INIT_DIR_LEN+1, (LPARAM)TmpHost.LocalInitDir);
\r
1820 SendDlgItemMessage(hDlg, HSET_REMOTE, WM_GETTEXT, INIT_DIR_LEN+1, (LPARAM)TmpHost.RemoteInitDir);
\r
1821 TmpHost.Anonymous = SendDlgItemMessage(hDlg, HSET_ANONYMOUS, BM_GETCHECK, 0, 0);
\r
1822 TmpHost.LastDir = SendDlgItemMessage(hDlg, HSET_LASTDIR, BM_GETCHECK, 0, 0);
\r
1823 if((strlen(TmpHost.HostName) == 0) && (strlen(TmpHost.HostAdrs) > 0))
\r
1825 memset(TmpHost.HostName, NUL, HOST_NAME_LEN+1);
\r
1826 strncpy(TmpHost.HostName, TmpHost.HostAdrs, HOST_NAME_LEN);
\r
1828 else if((strlen(TmpHost.HostName) > 0) && (strlen(TmpHost.HostAdrs) == 0))
\r
1830 memset(TmpHost.HostAdrs, NUL, HOST_ADRS_LEN+1);
\r
1831 strncpy(TmpHost.HostAdrs, TmpHost.HostName, HOST_ADRS_LEN);
\r
1840 hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000028);
\r
1846 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
1848 case HSET_LOCAL_BR :
\r
1849 if(SelectDir(hDlg, TmpHost.LocalInitDir, INIT_DIR_LEN) == TRUE)
\r
1850 SendDlgItemMessage(hDlg, HSET_LOCAL, WM_SETTEXT, 0, (LPARAM)TmpHost.LocalInitDir);
\r
1853 case HSET_REMOTE_CUR :
\r
1854 AskRemoteCurDir(Tmp, FMAX_PATH);
\r
1855 SendDlgItemMessage(hDlg, HSET_REMOTE, WM_SETTEXT, 0, (LPARAM)Tmp);
\r
1858 case HSET_ANONYMOUS :
\r
1859 if(SendDlgItemMessage(hDlg, HSET_ANONYMOUS, BM_GETCHECK, 0, 0) == 1)
\r
1861 SendDlgItemMessage(hDlg, HSET_USER, WM_SETTEXT, 0, (LPARAM)"anonymous");
\r
1863 // wStyle = GetWindowLong(GetDlgItem(hDlg, HSET_PASS), GWL_STYLE);
\r
1864 wStyle = GetWindowLongPtr(GetDlgItem(hDlg, HSET_PASS), GWL_STYLE);
\r
1865 wStyle &= ~ES_PASSWORD;
\r
1867 // SetWindowLong(GetDlgItem(hDlg, HSET_PASS), GWL_STYLE, wStyle);
\r
1868 SetWindowLongPtr(GetDlgItem(hDlg, HSET_PASS), GWL_STYLE, wStyle);
\r
1869 SendDlgItemMessage(hDlg, HSET_PASS, WM_SETTEXT, 0, (LPARAM)UserMailAdrs);
\r
1873 SendDlgItemMessage(hDlg, HSET_USER, WM_SETTEXT, 0, (LPARAM)"");
\r
1875 // wStyle = GetWindowLong(GetDlgItem(hDlg, HSET_PASS), GWL_STYLE);
\r
1876 wStyle = GetWindowLongPtr(GetDlgItem(hDlg, HSET_PASS), GWL_STYLE);
\r
1877 wStyle |= ES_PASSWORD;
\r
1879 // SetWindowLong(GetDlgItem(hDlg, HSET_PASS), GWL_STYLE, wStyle);
\r
1880 SetWindowLongPtr(GetDlgItem(hDlg, HSET_PASS), GWL_STYLE, wStyle);
\r
1881 SendDlgItemMessage(hDlg, HSET_PASS, WM_SETTEXT, 0, (LPARAM)"");
\r
1891 /*----- 拡張設定ウインドウのコールバック --------------------------------------
\r
1894 * HWND hDlg : ウインドウハンドル
\r
1895 * UINT message : メッセージ番号
\r
1896 * WPARAM wParam : メッセージの WPARAM 引数
\r
1897 * LPARAM lParam : メッセージの LPARAM 引数
\r
1901 *----------------------------------------------------------------------------*/
\r
1904 //static BOOL CALLBACK AdvSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
1905 static INT_PTR CALLBACK AdvSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
1913 case WM_INITDIALOG :
\r
1914 SendDlgItemMessage(hDlg, HSET_PORT, EM_LIMITTEXT, 5, 0);
\r
1915 sprintf(Tmp, "%d", TmpHost.Port);
\r
1916 SendDlgItemMessage(hDlg, HSET_PORT, WM_SETTEXT, 0, (LPARAM)Tmp);
\r
1917 SendDlgItemMessage(hDlg, HSET_ACCOUNT, EM_LIMITTEXT, ACCOUNT_LEN, 0);
\r
1918 SendDlgItemMessage(hDlg, HSET_ACCOUNT, WM_SETTEXT, 0, (LPARAM)TmpHost.Account);
\r
1919 SendDlgItemMessage(hDlg, HSET_PASV, BM_SETCHECK, TmpHost.Pasv, 0);
\r
1920 SendDlgItemMessage(hDlg, HSET_FIREWALL, BM_SETCHECK, TmpHost.FireWall, 0);
\r
1921 SendDlgItemMessage(hDlg, HSET_SYNCMOVE, BM_SETCHECK, TmpHost.SyncMove, 0);
\r
1922 for(i = -12; i <= 12; i++)
\r
1925 sprintf(Tmp, "GMT");
\r
1927 sprintf(Tmp, MSGJPN133, i);
\r
1929 sprintf(Tmp, "GMT%+02d:00", i);
\r
1930 SendDlgItemMessage(hDlg, HSET_TIMEZONE, CB_ADDSTRING, 0, (LPARAM)Tmp);
\r
1932 SendDlgItemMessage(hDlg, HSET_TIMEZONE, CB_SETCURSEL, TmpHost.TimeZone+12, 0);
\r
1934 SendDlgItemMessage(hDlg, HSET_SECURITY, CB_ADDSTRING, 0, (LPARAM)MSGJPN134);
\r
1935 SendDlgItemMessage(hDlg, HSET_SECURITY, CB_ADDSTRING, 0, (LPARAM)MSGJPN135);
\r
1936 SendDlgItemMessage(hDlg, HSET_SECURITY, CB_ADDSTRING, 0, (LPARAM)MSGJPN136);
\r
1937 SendDlgItemMessage(hDlg, HSET_SECURITY, CB_ADDSTRING, 0, (LPARAM)MSGJPN137);
\r
1938 SendDlgItemMessage(hDlg, HSET_SECURITY, CB_ADDSTRING, 0, (LPARAM)MSGJPN138);
\r
1939 SendDlgItemMessage(hDlg, HSET_SECURITY, CB_SETCURSEL, TmpHost.Security, 0);
\r
1940 SendDlgItemMessage(hDlg, HSET_INITCMD, EM_LIMITTEXT, INITCMD_LEN, 0);
\r
1941 SendDlgItemMessage(hDlg, HSET_INITCMD, WM_SETTEXT, 0, (LPARAM)TmpHost.InitCmd);
\r
1943 SendDlgItemMessage(hDlg, HSET_NETTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN332);
\r
1944 SendDlgItemMessage(hDlg, HSET_NETTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN333);
\r
1945 SendDlgItemMessage(hDlg, HSET_NETTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN334);
\r
1946 SendDlgItemMessage(hDlg, HSET_NETTYPE, CB_SETCURSEL, TmpHost.NetType, 0);
\r
1950 pnmhdr = (NMHDR FAR *)lParam;
\r
1951 switch(pnmhdr->code)
\r
1954 TmpHost.Pasv = SendDlgItemMessage(hDlg, HSET_PASV, BM_GETCHECK, 0, 0);
\r
1955 TmpHost.FireWall = SendDlgItemMessage(hDlg, HSET_FIREWALL, BM_GETCHECK, 0, 0);
\r
1956 TmpHost.SyncMove = SendDlgItemMessage(hDlg, HSET_SYNCMOVE, BM_GETCHECK, 0, 0);
\r
1957 SendDlgItemMessage(hDlg, HSET_PORT, WM_GETTEXT, 5+1, (LPARAM)Tmp);
\r
1958 TmpHost.Port = atoi(Tmp);
\r
1959 SendDlgItemMessage(hDlg, HSET_ACCOUNT, WM_GETTEXT, ACCOUNT_LEN+1, (LPARAM)TmpHost.Account);
\r
1960 TmpHost.TimeZone = SendDlgItemMessage(hDlg, HSET_TIMEZONE, CB_GETCURSEL, 0, 0) - 12;
\r
1961 TmpHost.Security = SendDlgItemMessage(hDlg, HSET_SECURITY, CB_GETCURSEL, 0, 0);
\r
1962 SendDlgItemMessage(hDlg, HSET_INITCMD, WM_GETTEXT, INITCMD_LEN+1, (LPARAM)TmpHost.InitCmd);
\r
1964 TmpHost.NetType = SendDlgItemMessage(hDlg, HSET_NETTYPE, CB_GETCURSEL, 0, 0);
\r
1972 hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000029);
\r
1978 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
1980 case HSET_PORT_NOR :
\r
1981 sprintf(Tmp, "%d", PORT_NOR);
\r
1982 SendDlgItemMessage(hDlg, HSET_PORT, WM_SETTEXT, 0, (LPARAM)Tmp);
\r
1991 /*----- 文字コード設定ウインドウのコールバック --------------------------------
\r
1994 * HWND hDlg : ウインドウハンドル
\r
1995 * UINT message : メッセージ番号
\r
1996 * WPARAM wParam : メッセージの WPARAM 引数
\r
1997 * LPARAM lParam : メッセージの LPARAM 引数
\r
2001 *----------------------------------------------------------------------------*/
\r
2004 //static BOOL CALLBACK CodeSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
2005 static INT_PTR CALLBACK CodeSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
2010 static const RADIOBUTTON KanjiButton[] = {
\r
2011 { HSET_NO_CNV, KANJI_NOCNV },
\r
2012 { HSET_SJIS_CNV, KANJI_SJIS },
\r
2013 { HSET_JIS_CNV, KANJI_JIS },
\r
2014 { HSET_EUC_CNV, KANJI_EUC },
\r
2015 { HSET_UTF8N_CNV, KANJI_UTF8N },
\r
2016 { HSET_UTF8BOM_CNV, KANJI_UTF8BOM }
\r
2018 #define KANJIBUTTONS (sizeof(KanjiButton)/sizeof(RADIOBUTTON))
\r
2020 static const RADIOBUTTON NameKanjiButton[] = {
\r
2021 { HSET_FN_AUTO_CNV, KANJI_AUTO },
\r
2022 { HSET_FN_SJIS_CNV, KANJI_SJIS },
\r
2023 { HSET_FN_JIS_CNV, KANJI_JIS },
\r
2024 { HSET_FN_EUC_CNV, KANJI_EUC },
\r
2025 { HSET_FN_SMH_CNV, KANJI_SMB_HEX },
\r
2026 { HSET_FN_SMC_CNV, KANJI_SMB_CAP },
\r
2028 // { HSET_FN_UTF8N_CNV, KANJI_UTF8N } // UTF-8対応
\r
2029 { HSET_FN_UTF8N_CNV, KANJI_UTF8N }, // UTF-8対応
\r
2030 { HSET_FN_UTF8HFSX_CNV, KANJI_UTF8HFSX }
\r
2032 #define NAMEKANJIBUTTONS (sizeof(NameKanjiButton)/sizeof(RADIOBUTTON))
\r
2036 case WM_INITDIALOG :
\r
2037 SetRadioButtonByValue(hDlg, TmpHost.KanjiCode, KanjiButton, KANJIBUTTONS);
\r
2038 SendDlgItemMessage(hDlg, HSET_HANCNV, BM_SETCHECK, TmpHost.KanaCnv, 0);
\r
2039 SetRadioButtonByValue(hDlg, TmpHost.NameKanjiCode, NameKanjiButton, NAMEKANJIBUTTONS);
\r
2041 if(IsUnicodeNormalizationDllLoaded() == NO)
\r
2042 EnableWindow(GetDlgItem(hDlg, HSET_FN_UTF8HFSX_CNV), FALSE);
\r
2043 SendDlgItemMessage(hDlg, HSET_FN_HANCNV, BM_SETCHECK, TmpHost.NameKanaCnv, 0);
\r
2047 pnmhdr = (NMHDR FAR *)lParam;
\r
2048 switch(pnmhdr->code)
\r
2051 TmpHost.KanjiCode = AskRadioButtonValue(hDlg, KanjiButton, KANJIBUTTONS);
\r
2052 TmpHost.KanaCnv = SendDlgItemMessage(hDlg, HSET_HANCNV, BM_GETCHECK, 0, 0);
\r
2053 TmpHost.NameKanjiCode = AskRadioButtonValue(hDlg, NameKanjiButton, NAMEKANJIBUTTONS);
\r
2054 TmpHost.NameKanaCnv = SendDlgItemMessage(hDlg, HSET_FN_HANCNV, BM_GETCHECK, 0, 0);
\r
2062 hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000030);
\r
2068 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
2070 case HSET_SJIS_CNV :
\r
2071 case HSET_JIS_CNV :
\r
2072 case HSET_EUC_CNV :
\r
2073 EnableWindow(GetDlgItem(hDlg, HSET_HANCNV), TRUE);
\r
2077 case HSET_NO_CNV :
\r
2078 case HSET_UTF8N_CNV :
\r
2079 case HSET_UTF8BOM_CNV :
\r
2080 EnableWindow(GetDlgItem(hDlg, HSET_HANCNV), FALSE);
\r
2083 case HSET_FN_JIS_CNV :
\r
2084 case HSET_FN_EUC_CNV :
\r
2085 EnableWindow(GetDlgItem(hDlg, HSET_FN_HANCNV), TRUE);
\r
2088 case HSET_FN_AUTO_CNV :
\r
2089 case HSET_FN_SJIS_CNV :
\r
2090 case HSET_FN_SMH_CNV :
\r
2091 case HSET_FN_SMC_CNV :
\r
2092 case HSET_FN_UTF8N_CNV : // UTF-8対応
\r
2094 case HSET_FN_UTF8HFSX_CNV :
\r
2095 EnableWindow(GetDlgItem(hDlg, HSET_FN_HANCNV), FALSE);
\r
2104 /*----- ダイアルアップ設定ウインドウのコールバック ----------------------------
\r
2107 * HWND hDlg : ウインドウハンドル
\r
2108 * UINT message : メッセージ番号
\r
2109 * WPARAM wParam : メッセージの WPARAM 引数
\r
2110 * LPARAM lParam : メッセージの LPARAM 引数
\r
2114 *----------------------------------------------------------------------------*/
\r
2117 //static BOOL CALLBACK DialupSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
2118 static INT_PTR CALLBACK DialupSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
2124 case WM_INITDIALOG :
\r
2125 SendDlgItemMessage(hDlg, HSET_DIALUP, BM_SETCHECK, TmpHost.Dialup, 0);
\r
2126 SendDlgItemMessage(hDlg, HSET_DIALUSETHIS, BM_SETCHECK, TmpHost.DialupAlways, 0);
\r
2127 SendDlgItemMessage(hDlg, HSET_DIALNOTIFY, BM_SETCHECK, TmpHost.DialupNotify, 0);
\r
2128 if(AskRasUsable() == NO)
\r
2129 EnableWindow(GetDlgItem(hDlg, HSET_DIALUP), FALSE);
\r
2130 if((TmpHost.DialupAlways == NO) || (AskRasUsable() == NO))
\r
2131 EnableWindow(GetDlgItem(hDlg, HSET_DIALNOTIFY), FALSE);
\r
2132 if((TmpHost.Dialup == NO) || (AskRasUsable() == NO))
\r
2134 EnableWindow(GetDlgItem(hDlg, HSET_DIALENTRY), FALSE);
\r
2135 EnableWindow(GetDlgItem(hDlg, HSET_DIALUSETHIS), FALSE);
\r
2136 EnableWindow(GetDlgItem(hDlg, HSET_DIALNOTIFY), FALSE);
\r
2138 SetRasEntryToComboBox(hDlg, HSET_DIALENTRY, TmpHost.DialEntry);
\r
2142 pnmhdr = (NMHDR FAR *)lParam;
\r
2143 switch(pnmhdr->code)
\r
2146 TmpHost.Dialup = SendDlgItemMessage(hDlg, HSET_DIALUP, BM_GETCHECK, 0, 0);
\r
2147 TmpHost.DialupAlways = SendDlgItemMessage(hDlg, HSET_DIALUSETHIS, BM_GETCHECK, 0, 0);
\r
2148 TmpHost.DialupNotify = SendDlgItemMessage(hDlg, HSET_DIALNOTIFY, BM_GETCHECK, 0, 0);
\r
2149 SendDlgItemMessage(hDlg, HSET_DIALENTRY, WM_GETTEXT, RAS_NAME_LEN+1, (LPARAM)TmpHost.DialEntry);
\r
2157 hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000031);
\r
2163 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
2165 case HSET_DIALUP :
\r
2166 if(SendDlgItemMessage(hDlg, HSET_DIALUP, BM_GETCHECK, 0, 0) == 0)
\r
2168 EnableWindow(GetDlgItem(hDlg, HSET_DIALENTRY), FALSE);
\r
2169 EnableWindow(GetDlgItem(hDlg, HSET_DIALUSETHIS), FALSE);
\r
2170 EnableWindow(GetDlgItem(hDlg, HSET_DIALNOTIFY), FALSE);
\r
2175 EnableWindow(GetDlgItem(hDlg, HSET_DIALENTRY), TRUE);
\r
2176 EnableWindow(GetDlgItem(hDlg, HSET_DIALUSETHIS), TRUE);
\r
2180 case HSET_DIALUSETHIS :
\r
2181 if(SendDlgItemMessage(hDlg, HSET_DIALUSETHIS, BM_GETCHECK, 0, 0) == 0)
\r
2182 EnableWindow(GetDlgItem(hDlg, HSET_DIALNOTIFY), FALSE);
\r
2184 EnableWindow(GetDlgItem(hDlg, HSET_DIALNOTIFY), TRUE);
\r
2193 /*----- 高度設定ウインドウのコールバック --------------------------------------
\r
2196 * HWND hDlg : ウインドウハンドル
\r
2197 * UINT message : メッセージ番号
\r
2198 * WPARAM wParam : メッセージの WPARAM 引数
\r
2199 * LPARAM lParam : メッセージの LPARAM 引数
\r
2203 *----------------------------------------------------------------------------*/
\r
2206 //static BOOL CALLBACK Adv2SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
2207 static INT_PTR CALLBACK Adv2SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
2214 case WM_INITDIALOG :
\r
2215 SendDlgItemMessage(hDlg, HSET_CHMOD_CMD, EM_LIMITTEXT, CHMOD_CMD_LEN, 0);
\r
2216 SendDlgItemMessage(hDlg, HSET_CHMOD_CMD, WM_SETTEXT, 0, (LPARAM)TmpHost.ChmodCmd);
\r
2217 SendDlgItemMessage(hDlg, HSET_LS_FNAME, EM_LIMITTEXT, NLST_NAME_LEN, 0);
\r
2218 SendDlgItemMessage(hDlg, HSET_LS_FNAME, WM_SETTEXT, 0, (LPARAM)TmpHost.LsName);
\r
2219 SendDlgItemMessage(hDlg, HSET_LISTCMD, BM_SETCHECK, TmpHost.ListCmdOnly, 0);
\r
2220 if(TmpHost.ListCmdOnly == YES)
\r
2221 EnableWindow(GetDlgItem(hDlg, HSET_NLST_R), FALSE);
\r
2224 EnableWindow(GetDlgItem(hDlg, HSET_MLSDCMD), FALSE);
\r
2225 SendDlgItemMessage(hDlg, HSET_MLSDCMD, BM_SETCHECK, TmpHost.UseMLSD, 0);
\r
2226 SendDlgItemMessage(hDlg, HSET_NLST_R, BM_SETCHECK, TmpHost.UseNLST_R, 0);
\r
2227 SendDlgItemMessage(hDlg, HSET_FULLPATH, BM_SETCHECK, TmpHost.NoFullPath, 0);
\r
2228 SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN139);
\r
2229 SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN140);
\r
2230 SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN141);
\r
2231 SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN142);
\r
2232 SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN143);
\r
2233 SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN144);
\r
2234 SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN289);
\r
2235 SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN295);
\r
2236 #if defined(HAVE_TANDEM)
\r
2237 SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN2000);
\r
2239 SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_SETCURSEL, TmpHost.HostType, 0);
\r
2240 #if defined(HAVE_TANDEM)
\r
2241 if(TmpHost.HostType == 2 || TmpHost.HostType == HTYPE_TANDEM) /* VAX or Tandem */
\r
2243 if(TmpHost.HostType == 2)
\r
2246 EnableWindow(GetDlgItem(hDlg, HSET_NLST_R), FALSE);
\r
2247 EnableWindow(GetDlgItem(hDlg, HSET_LISTCMD), FALSE);
\r
2248 EnableWindow(GetDlgItem(hDlg, HSET_FULLPATH), FALSE);
\r
2253 pnmhdr = (NMHDR FAR *)lParam;
\r
2254 switch(pnmhdr->code)
\r
2257 SendDlgItemMessage(hDlg, HSET_CHMOD_CMD, WM_GETTEXT, CHMOD_CMD_LEN+1, (LPARAM)TmpHost.ChmodCmd);
\r
2258 SendDlgItemMessage(hDlg, HSET_LS_FNAME, WM_GETTEXT, NLST_NAME_LEN+1, (LPARAM)TmpHost.LsName);
\r
2259 TmpHost.ListCmdOnly = SendDlgItemMessage(hDlg, HSET_LISTCMD, BM_GETCHECK, 0, 0);
\r
2261 TmpHost.UseMLSD = SendDlgItemMessage(hDlg, HSET_MLSDCMD, BM_GETCHECK, 0, 0);
\r
2262 TmpHost.UseNLST_R = SendDlgItemMessage(hDlg, HSET_NLST_R, BM_GETCHECK, 0, 0);
\r
2263 TmpHost.NoFullPath = SendDlgItemMessage(hDlg, HSET_FULLPATH, BM_GETCHECK, 0, 0);
\r
2264 TmpHost.HostType = SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_GETCURSEL, 0, 0);
\r
2272 hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000032);
\r
2278 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
2280 case HSET_CHMOD_NOR :
\r
2281 SendDlgItemMessage(hDlg, HSET_CHMOD_CMD, WM_SETTEXT, 0, (LPARAM)CHMOD_CMD_NOR);
\r
2284 case HSET_LS_FNAME_NOR :
\r
2285 SendDlgItemMessage(hDlg, HSET_LS_FNAME, WM_SETTEXT, 0, (LPARAM)LS_FNAME);
\r
2288 case HSET_LISTCMD :
\r
2289 if(SendDlgItemMessage(hDlg, HSET_LISTCMD, BM_GETCHECK, 0, 0) == 0)
\r
2291 // EnableWindow(GetDlgItem(hDlg, HSET_NLST_R), TRUE);
\r
2293 EnableWindow(GetDlgItem(hDlg, HSET_MLSDCMD), FALSE);
\r
2294 EnableWindow(GetDlgItem(hDlg, HSET_NLST_R), TRUE);
\r
2298 // EnableWindow(GetDlgItem(hDlg, HSET_NLST_R), FALSE);
\r
2300 EnableWindow(GetDlgItem(hDlg, HSET_MLSDCMD), TRUE);
\r
2301 EnableWindow(GetDlgItem(hDlg, HSET_NLST_R), FALSE);
\r
2305 case HSET_HOSTTYPE :
\r
2306 Num = SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_GETCURSEL, 0, 0);
\r
2309 EnableWindow(GetDlgItem(hDlg, HSET_NLST_R), FALSE);
\r
2310 EnableWindow(GetDlgItem(hDlg, HSET_LISTCMD), FALSE);
\r
2311 EnableWindow(GetDlgItem(hDlg, HSET_FULLPATH), FALSE);
\r
2313 #if defined(HAVE_TANDEM)
\r
2314 else if(Num == HTYPE_TANDEM) /* Tandem */
\r
2316 /* Tandem を選択すると自動的に LIST にチェックをいれる */
\r
2317 SendDlgItemMessage(hDlg, HSET_LISTCMD, BM_SETCHECK, 1, 0);
\r
2318 EnableWindow(GetDlgItem(hDlg, HSET_NLST_R), FALSE);
\r
2319 EnableWindow(GetDlgItem(hDlg, HSET_LISTCMD), FALSE);
\r
2320 EnableWindow(GetDlgItem(hDlg, HSET_FULLPATH), FALSE);
\r
2324 if(SendDlgItemMessage(hDlg, HSET_LISTCMD, BM_GETCHECK, 0, 0) == 0) {
\r
2325 EnableWindow(GetDlgItem(hDlg, HSET_NLST_R), TRUE);
\r
2326 EnableWindow(GetDlgItem(hDlg, HSET_LISTCMD), TRUE);
\r
2328 EnableWindow(GetDlgItem(hDlg, HSET_NLST_R), FALSE);
\r
2329 EnableWindow(GetDlgItem(hDlg, HSET_LISTCMD), TRUE);
\r
2331 EnableWindow(GetDlgItem(hDlg, HSET_FULLPATH), TRUE);
\r
2336 EnableWindow(GetDlgItem(hDlg, HSET_NLST_R), TRUE);
\r
2337 EnableWindow(GetDlgItem(hDlg, HSET_LISTCMD), TRUE);
\r
2338 EnableWindow(GetDlgItem(hDlg, HSET_FULLPATH), TRUE);
\r
2350 static INT_PTR CALLBACK CryptSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
2357 case WM_INITDIALOG :
\r
2358 SendDlgItemMessage(hDlg, HSET_NO_ENCRYPTION, BM_SETCHECK, TmpHost.UseNoEncryption, 0);
\r
2359 if(IsOpenSSLLoaded())
\r
2361 SendDlgItemMessage(hDlg, HSET_FTPES, BM_SETCHECK, TmpHost.UseFTPES, 0);
\r
2362 SendDlgItemMessage(hDlg, HSET_FTPIS, BM_SETCHECK, TmpHost.UseFTPIS, 0);
\r
2366 SendDlgItemMessage(hDlg, HSET_FTPES, BM_SETCHECK, BST_UNCHECKED, 0);
\r
2367 EnableWindow(GetDlgItem(hDlg, HSET_FTPES), FALSE);
\r
2368 SendDlgItemMessage(hDlg, HSET_FTPIS, BM_SETCHECK, BST_UNCHECKED, 0);
\r
2369 EnableWindow(GetDlgItem(hDlg, HSET_FTPIS), FALSE);
\r
2371 SendDlgItemMessage(hDlg, HSET_SFTP, BM_SETCHECK, BST_UNCHECKED, 0);
\r
2372 EnableWindow(GetDlgItem(hDlg, HSET_SFTP), FALSE);
\r
2373 EnableWindow(GetDlgItem(hDlg, PKEY_FILE_BR), FALSE);
\r
2374 EnableWindow(GetDlgItem(hDlg, HSET_PRIVATE_KEY), FALSE);
\r
2375 SendDlgItemMessage(hDlg, HSET_NO_WEAK, BM_SETCHECK, TmpHost.NoWeakEncryption, 0);
\r
2379 pnmhdr = (NMHDR FAR *)lParam;
\r
2380 switch(pnmhdr->code)
\r
2383 TmpHost.UseNoEncryption = SendDlgItemMessage(hDlg, HSET_NO_ENCRYPTION, BM_GETCHECK, 0, 0);
\r
2384 if(IsOpenSSLLoaded())
\r
2386 TmpHost.UseFTPES = SendDlgItemMessage(hDlg, HSET_FTPES, BM_GETCHECK, 0, 0);
\r
2387 TmpHost.UseFTPIS = SendDlgItemMessage(hDlg, HSET_FTPIS, BM_GETCHECK, 0, 0);
\r
2389 TmpHost.NoWeakEncryption = SendDlgItemMessage(hDlg, HSET_NO_WEAK, BM_GETCHECK, 0, 0);
\r
2397 hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000065);
\r
2406 static INT_PTR CALLBACK Adv3SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
2412 static const RADIOBUTTON KanjiButton[] = {
\r
2413 { HSET_NO_CNV, KANJI_NOCNV },
\r
2414 { HSET_SJIS_CNV, KANJI_SJIS },
\r
2415 { HSET_JIS_CNV, KANJI_JIS },
\r
2416 { HSET_EUC_CNV, KANJI_EUC },
\r
2417 { HSET_UTF8N_CNV, KANJI_UTF8N },
\r
2418 { HSET_UTF8BOM_CNV, KANJI_UTF8BOM }
\r
2420 #define KANJIBUTTONS (sizeof(KanjiButton)/sizeof(RADIOBUTTON))
\r
2424 case WM_INITDIALOG :
\r
2425 SendDlgItemMessage(hDlg, HSET_THREAD_COUNT, EM_LIMITTEXT, (WPARAM)1, 0);
\r
2426 SetDecimalText(hDlg, HSET_THREAD_COUNT, TmpHost.MaxThreadCount);
\r
2427 SendDlgItemMessage(hDlg, HSET_THREAD_COUNT_SPN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(MAX_DATA_CONNECTION, 1));
\r
2428 SendDlgItemMessage(hDlg, HSET_REUSE_SOCKET, BM_SETCHECK, TmpHost.ReuseCmdSkt, 0);
\r
2429 SendDlgItemMessage(hDlg, HSET_NOOP_INTERVAL, EM_LIMITTEXT, (WPARAM)3, 0);
\r
2430 SetDecimalText(hDlg, HSET_NOOP_INTERVAL, TmpHost.NoopInterval);
\r
2431 SendDlgItemMessage(hDlg, HSET_NOOP_INTERVAL_SPN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(300, 0));
\r
2432 SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_ADDSTRING, 0, (LPARAM)MSGJPN335);
\r
2433 SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_ADDSTRING, 0, (LPARAM)MSGJPN336);
\r
2434 SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_ADDSTRING, 0, (LPARAM)MSGJPN337);
\r
2435 SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_ADDSTRING, 0, (LPARAM)MSGJPN338);
\r
2436 if(TmpHost.TransferErrorNotify == YES)
\r
2437 SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_SETCURSEL, 0, 0);
\r
2438 else if(TmpHost.TransferErrorMode == EXIST_OVW)
\r
2439 SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_SETCURSEL, 1, 0);
\r
2440 else if(TmpHost.TransferErrorMode == EXIST_RESUME)
\r
2441 SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_SETCURSEL, 2, 0);
\r
2442 else if(TmpHost.TransferErrorMode == EXIST_IGNORE)
\r
2443 SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_SETCURSEL, 3, 0);
\r
2445 SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_SETCURSEL, 0, 0);
\r
2446 SendDlgItemMessage(hDlg, HSET_ERROR_RECONNECT, BM_SETCHECK, TmpHost.TransferErrorReconnect, 0);
\r
2447 SendDlgItemMessage(hDlg, HSET_NO_PASV_ADRS, BM_SETCHECK, TmpHost.NoPasvAdrs, 0);
\r
2451 pnmhdr = (NMHDR FAR *)lParam;
\r
2452 switch(pnmhdr->code)
\r
2455 TmpHost.MaxThreadCount = GetDecimalText(hDlg, HSET_THREAD_COUNT);
\r
2456 CheckRange2(&TmpHost.MaxThreadCount, MAX_DATA_CONNECTION, 1);
\r
2457 TmpHost.ReuseCmdSkt = SendDlgItemMessage(hDlg, HSET_REUSE_SOCKET, BM_GETCHECK, 0, 0);
\r
2458 TmpHost.NoopInterval = GetDecimalText(hDlg, HSET_NOOP_INTERVAL);
\r
2459 CheckRange2(&TmpHost.NoopInterval, 300, 0);
\r
2460 switch(SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_GETCURSEL, 0, 0))
\r
2463 TmpHost.TransferErrorMode = EXIST_OVW;
\r
2464 TmpHost.TransferErrorNotify = YES;
\r
2467 TmpHost.TransferErrorMode = EXIST_OVW;
\r
2468 TmpHost.TransferErrorNotify = NO;
\r
2471 TmpHost.TransferErrorMode = EXIST_RESUME;
\r
2472 TmpHost.TransferErrorNotify = NO;
\r
2475 TmpHost.TransferErrorMode = EXIST_IGNORE;
\r
2476 TmpHost.TransferErrorNotify = NO;
\r
2479 TmpHost.TransferErrorReconnect = SendDlgItemMessage(hDlg, HSET_ERROR_RECONNECT, BM_GETCHECK, 0, 0);
\r
2480 TmpHost.NoPasvAdrs = SendDlgItemMessage(hDlg, HSET_NO_PASV_ADRS, BM_GETCHECK, 0, 0);
\r
2488 hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000066);
\r
2498 int SetHostEncryption(int Num, int UseNoEncryption, int UseFTPES, int UseFTPIS, int UseSFTP)
\r
2501 HOSTLISTDATA *Pos;
\r
2504 if((Num >= 0) && (Num < Hosts))
\r
2506 Pos = GetNodeByNum(Num);
\r
2507 Pos->Set.UseNoEncryption = UseNoEncryption;
\r
2508 Pos->Set.UseFTPES = UseFTPES;
\r
2509 Pos->Set.UseFTPIS = UseFTPIS;
\r
2510 Pos->Set.UseSFTP = UseSFTP;
\r
2511 Sts = FFFTP_SUCCESS;
\r