OSDN Git Service

Fix bugs of unexpected operation unlocking.
[ffftp/ffftp.git] / toolmenu.c
1 /*=============================================================================\r
2 *\r
3 *                                                               ツールバーとメニュー\r
4 *\r
5 ===============================================================================\r
6 / Copyright (C) 1997-2007 Sota. All rights reserved.\r
7 /\r
8 / Redistribution and use in source and binary forms, with or without \r
9 / modification, are permitted provided that the following conditions \r
10 / are met:\r
11 /\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
17 /\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
29 \r
30 #define  STRICT\r
31 // IPv6対応\r
32 #include <winsock2.h>\r
33 #include <windows.h>\r
34 #include <stdio.h>\r
35 #include <stdlib.h>\r
36 #include <string.h>\r
37 #include <mbstring.h>\r
38 #include <malloc.h>\r
39 #include <windowsx.h>\r
40 #include <commctrl.h>\r
41 #include <stdarg.h>\r
42 // IPv6対応\r
43 //#include <winsock.h>\r
44 \r
45 #include "common.h"\r
46 #include "resource.h"\r
47 \r
48 \r
49 /*===== プロトタイプ =====*/\r
50 \r
51 static void AddOpenMenu(HMENU hMenu, UINT Flg);\r
52 static LRESULT CALLBACK HistEditBoxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);\r
53 \r
54 /* 2007/09/21 sunasunamix  ここから *********************/\r
55 static LRESULT CALLBACK CountermeasureTbarMainProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam);\r
56 static LRESULT CALLBACK CountermeasureTbarLocalProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam);\r
57 static LRESULT CALLBACK CountermeasureTbarRemoteProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam);\r
58 /********************************************* ここまで */\r
59 \r
60 \r
61 /*===== 外部参照 =====*/\r
62 \r
63 extern int SepaWidth;\r
64 extern int RemoteWidth;\r
65 \r
66 extern int CancelFlg;\r
67 \r
68 /* 設定値 */\r
69 extern int DotFile;\r
70 extern char AsciiExt[ASCII_EXT_LEN+1];\r
71 extern int TransMode;\r
72 extern int ListType;\r
73 extern int LocalWidth;\r
74 extern char ViewerName[VIEWERS][FMAX_PATH+1];\r
75 extern int TransMode;\r
76 extern int SortSave;\r
77 \r
78 /*===== ローカルなワーク =====*/\r
79 \r
80 static HWND hWndTbarMain = NULL;\r
81 static HWND hWndTbarLocal = NULL;\r
82 static HWND hWndTbarRemote = NULL;\r
83 static HWND hWndDirLocal = NULL;\r
84 static HWND hWndDirRemote = NULL;\r
85 static HWND hWndDirLocalEdit = NULL;\r
86 static HWND hWndDirRemoteEdit = NULL;\r
87 \r
88 static WNDPROC HistEditBoxProcPtr;\r
89 \r
90 static HFONT DlgFont = NULL;\r
91 \r
92 static int TmpTransMode;\r
93 static int TmpHostKanjiCode;\r
94 static int TmpHostKanaCnv;\r
95 \r
96 // TODO: ローカルの漢字コードをShift_JIS以外にも対応\r
97 static int TmpLocalKanjiCode;\r
98 \r
99 static int TmpLocalFileSort;\r
100 static int TmpLocalDirSort;\r
101 static int TmpRemoteFileSort;\r
102 static int TmpRemoteDirSort;\r
103 \r
104 static int SyncMove = NO;\r
105 \r
106 // デッドロック対策\r
107 //static int HideUI = NO;\r
108 static int HideUI = 0;\r
109 \r
110 \r
111 /* 2007/09/21 sunasunamix  ここから *********************/\r
112 static WNDPROC pOldTbarMainProc   = NULL;\r
113 static WNDPROC pOldTbarLocalProc  = NULL;\r
114 static WNDPROC pOldTbarRemoteProc = NULL;\r
115 /********************************************* ここまで */\r
116 \r
117 \r
118 /* 以前、コンボボックスにカレントフォルダを憶えさせていた流れで */\r
119 /* このファイルでカレントフォルダを憶えさせる */\r
120 static char LocalCurDir[FMAX_PATH+1];\r
121 static char RemoteCurDir[FMAX_PATH+1];\r
122 \r
123 \r
124 /* メインのツールバー */\r
125 static TBBUTTON TbarDataMain[] = {\r
126         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
127         { 0,  MENU_CONNECT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
128         { 16, MENU_QUICK, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
129         { 1,  MENU_DISCONNECT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
130         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
131         { 2,  MENU_DOWNLOAD, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
132         { 3,  MENU_UPLOAD, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
133         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
134         { 24, MENU_MIRROR_UPLOAD, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
135         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
136         { 4,  MENU_DELETE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
137         { 5,  MENU_RENAME, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
138         { 6,  MENU_MKDIR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
139         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
140         { 7,  MENU_TEXT, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
141         { 8,  MENU_BINARY, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
142         { 17, MENU_AUTO, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
143         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
144         { 27, MENU_L_KNJ_SJIS, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
145         { 20, MENU_L_KNJ_EUC, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
146         { 21, MENU_L_KNJ_JIS, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
147         { 28, MENU_L_KNJ_UTF8N, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
148         { 29, MENU_L_KNJ_UTF8BOM, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
149         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
150         { 27, MENU_KNJ_SJIS, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
151         { 20, MENU_KNJ_EUC, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
152         { 21, MENU_KNJ_JIS, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
153         { 28, MENU_KNJ_UTF8N, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
154         { 29, MENU_KNJ_UTF8BOM, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
155         { 22, MENU_KNJ_NONE, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
156         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
157         { 23, MENU_KANACNV, TBSTATE_ENABLED, TBSTYLE_CHECK, 0, 0 },\r
158         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
159         { 15, MENU_REFRESH, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
160         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
161         { 18, MENU_LIST, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
162         { 19, MENU_REPORT, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP, 0, 0 },\r
163         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
164         { 25, MENU_SYNC, TBSTATE_ENABLED, TBSTYLE_CHECK, 0, 0 },\r
165         { 0,  0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
166         { 26, MENU_ABORT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 }\r
167 };\r
168 \r
169 /* ローカル側のツールバー */\r
170 static TBBUTTON TbarDataLocal[] = {\r
171         { 0, 0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
172         { 0, MENU_LOCAL_UPDIR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
173         { 1, MENU_LOCAL_CHDIR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
174         { 0, 0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 }\r
175 };\r
176 \r
177 /* ホスト側のツールバー */\r
178 static TBBUTTON TbarDataRemote[] = {\r
179         { 0, 0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 },\r
180         { 0, MENU_REMOTE_UPDIR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
181         { 1, MENU_REMOTE_CHDIR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },\r
182         { 0, 0, TBSTATE_ENABLED, BTNS_SEP, 0, 0 }\r
183 };\r
184 \r
185 /* 全ボタン/メニュー項目 */\r
186 static const int HideMenus[] = {\r
187         MENU_CONNECT,           MENU_QUICK,                     MENU_DISCONNECT,\r
188         MENU_SET_CONNECT,       MENU_IMPORT_WS,         MENU_EXIT,\r
189         MENU_DOWNLOAD,          MENU_UPLOAD,            MENU_DOWNLOAD_AS,       MENU_MIRROR_UPLOAD,\r
190         MENU_UPLOAD_AS,         MENU_DOWNLOAD_NAME,     MENU_MIRROR_UPLOAD,\r
191         MENU_FILESIZE,          MENU_DELETE,            MENU_RENAME,\r
192         MENU_CHMOD,                     MENU_MKDIR,                     MENU_SOMECMD,\r
193         MENU_SYNC,\r
194         MENU_BMARK_ADD,         MENU_BMARK_ADD_LOCAL, MENU_BMARK_ADD_BOTH,\r
195         MENU_BMARK_EDIT,\r
196         MENU_FILTER,            MENU_FIND,                      MENU_FINDNEXT,          MENU_SELECT,\r
197         MENU_SELECT_ALL,        MENU_LIST,                      MENU_REPORT,\r
198         MENU_SORT,                      MENU_DOTFILE,\r
199         MENU_DIRINFO,           MENU_TASKINFO,          MENU_REFRESH,\r
200         MENU_OPTION,\r
201         MENU_OTPCALC,\r
202         MENU_HELP,                      MENU_HELP_TROUBLE,      MENU_ABOUT,\r
203         MENU_REGINIT,\r
204         MENU_TEXT,                      MENU_BINARY,            MENU_AUTO,\r
205         MENU_KNJ_SJIS,          MENU_KNJ_EUC,           MENU_KNJ_JIS,           MENU_KNJ_UTF8N,         MENU_KNJ_UTF8BOM,       MENU_KNJ_NONE,\r
206         MENU_L_KNJ_SJIS,        MENU_L_KNJ_EUC,         MENU_L_KNJ_JIS,         MENU_L_KNJ_UTF8N,       MENU_L_KNJ_UTF8BOM,\r
207         MENU_KANACNV,\r
208         MENU_LOCAL_UPDIR,       MENU_LOCAL_CHDIR,\r
209         MENU_REMOTE_UPDIR,      MENU_REMOTE_CHDIR,\r
210         MENU_HIST_1,            MENU_HIST_2,            MENU_HIST_3,            MENU_HIST_4,\r
211         MENU_HIST_5,            MENU_HIST_6,            MENU_HIST_7,            MENU_HIST_8,\r
212         MENU_HIST_9,            MENU_HIST_10,           MENU_HIST_11,           MENU_HIST_12,\r
213         MENU_HIST_13,           MENU_HIST_14,           MENU_HIST_15,           MENU_HIST_16,\r
214         MENU_HIST_17,           MENU_HIST_18,           MENU_HIST_19,           MENU_HIST_20\r
215 };\r
216 \r
217 \r
218 \r
219 /*----- ツールバーを作成する --------------------------------------------------\r
220 *\r
221 *       Parameter\r
222 *               HWND hWnd : 親ウインドウのウインドウハンドル\r
223 *               HINSTANCE hInst : インスタンスハンドル\r
224 *\r
225 *       Return Value\r
226 *               int ステータス\r
227 *                       FFFTP_SUCCESS/FFFTP_FAIL\r
228 *----------------------------------------------------------------------------*/\r
229 \r
230 int MakeToolBarWindow(HWND hWnd, HINSTANCE hInst)\r
231 {\r
232         int Sts;\r
233         RECT Rect1;\r
234         char Tmp[FMAX_PATH+1];\r
235         char *Pos;\r
236         int Tmp2;\r
237         DWORD NoDrives;\r
238 \r
239         /*===== メインのツールバー =====*/\r
240 \r
241         hWndTbarMain = CreateToolbarEx(\r
242                                 hWnd,\r
243                                 WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_TOP | TBSTYLE_FLAT,\r
244                                 1,\r
245                                 27,\r
246                                 hInst,\r
247                                 main_toolbar_bmp,\r
248                                 TbarDataMain,\r
249                                 sizeof(TbarDataMain)/sizeof(TBBUTTON),\r
250                                 16,16,\r
251                                 16,16,\r
252                                 sizeof(TBBUTTON));\r
253 \r
254         if(hWndTbarMain != NULL)\r
255         {\r
256                 /* 2007/09/21 sunasunamix  ここから *********************/\r
257                 // 64ビット対応\r
258 //              pOldTbarMainProc = (WNDPROC)SetWindowLong(hWndTbarMain, GWL_WNDPROC, (DWORD)CountermeasureTbarMainProc);\r
259                 pOldTbarMainProc = (WNDPROC)SetWindowLongPtr(hWndTbarMain, GWLP_WNDPROC, (LONG_PTR)CountermeasureTbarMainProc);\r
260                 /********************************************* ここまで */\r
261 \r
262                 GetClientRect(hWnd, &Rect1);\r
263                 MoveWindow(hWndTbarMain, 0, 0, Rect1.right, TOOLWIN_HEIGHT, FALSE);\r
264         }\r
265 \r
266         /*===== ローカルのツールバー =====*/\r
267 \r
268         hWndTbarLocal = CreateToolbarEx(\r
269                                 hWnd,\r
270                                 WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_NORESIZE | TBSTYLE_FLAT,\r
271                                 2,\r
272                                 2,\r
273                                 hInst,\r
274                                 remote_toolbar_bmp,\r
275                                 TbarDataLocal,\r
276                                 sizeof(TbarDataLocal)/sizeof(TBBUTTON),\r
277                                 16,16,\r
278                                 16,16,\r
279                                 sizeof(TBBUTTON));\r
280 \r
281         if(hWndTbarLocal != NULL)\r
282         {\r
283                 /* 2007/09/21 sunasunamix  ここから *********************/\r
284                 // 64ビット対応\r
285 //              pOldTbarLocalProc = (WNDPROC)SetWindowLong(hWndTbarLocal, GWL_WNDPROC, (DWORD)CountermeasureTbarLocalProc);\r
286                 pOldTbarLocalProc = (WNDPROC)SetWindowLongPtr(hWndTbarLocal, GWLP_WNDPROC, (LONG_PTR)CountermeasureTbarLocalProc);\r
287                 /********************************************* ここまで */\r
288 \r
289                 MoveWindow(hWndTbarLocal, 0, TOOLWIN_HEIGHT, LocalWidth, TOOLWIN_HEIGHT, FALSE);\r
290 \r
291                 /*===== ローカルのディレクトリ名ウインドウ =====*/\r
292 \r
293                 SendMessage(hWndTbarLocal, TB_GETITEMRECT, 3, (LPARAM)&Rect1);\r
294 #ifndef FFFTP_ENGLISH\r
295                 DlgFont = CreateFont(Rect1.bottom-Rect1.top-8, 0, 0, 0, 0, FALSE,FALSE,FALSE,SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,MSGJPN254);\r
296 #else\r
297                 DlgFont = CreateFont(Rect1.bottom-Rect1.top-8, 0, 0, 0, 0, FALSE,FALSE,FALSE,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,MSGJPN254);\r
298 #endif\r
299 \r
300                 hWndDirLocal = CreateWindowEx(WS_EX_CLIENTEDGE,\r
301                                         "COMBOBOX", "",\r
302                                         WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | CBS_DROPDOWN | CBS_SORT | CBS_AUTOHSCROLL,\r
303                                         Rect1.right, Rect1.top, LocalWidth - Rect1.right, 200,\r
304                                         hWndTbarLocal, (HMENU)COMBO_LOCAL, hInst, NULL);\r
305 \r
306                 if(hWndDirLocal != NULL)\r
307                 {\r
308                         /* エディットコントロールを探す */\r
309                         hWndDirLocalEdit = GetWindow(hWndDirLocal, GW_CHILD);\r
310                         if(hWndDirLocalEdit != NULL)\r
311                                 // 64ビット対応\r
312 //                              HistEditBoxProcPtr = (WNDPROC)SetWindowLong(hWndDirLocalEdit, GWL_WNDPROC, (LONG)HistEditBoxWndProc);\r
313                                 HistEditBoxProcPtr = (WNDPROC)SetWindowLongPtr(hWndDirLocalEdit, GWLP_WNDPROC, (LONG_PTR)HistEditBoxWndProc);\r
314 \r
315                         SendMessage(hWndDirLocal, WM_SETFONT, (WPARAM)DlgFont, MAKELPARAM(TRUE, 0));\r
316                         SendMessage(hWndDirLocal, CB_LIMITTEXT, FMAX_PATH, 0);\r
317 \r
318                         /* ドライブ名をセットしておく */\r
319                         GetLogicalDriveStrings(FMAX_PATH, Tmp);\r
320                         NoDrives = LoadHideDriveListRegistry();\r
321                         Pos = Tmp;\r
322                         while(*Pos != NUL)\r
323                         {\r
324                                 Tmp2 = toupper(*Pos) - 'A';\r
325                                 if((NoDrives & (0x00000001 << Tmp2)) == 0)\r
326                                         SetLocalDirHist(Pos);\r
327                                 Pos = strchr(Pos, NUL) + 1;\r
328                         }\r
329                         SendMessage(hWndDirLocal, CB_SETCURSEL, 0, 0);\r
330                 }\r
331         }\r
332 \r
333         /*===== ホストのツールバー =====*/\r
334 \r
335         hWndTbarRemote = CreateToolbarEx(\r
336                                 hWnd,\r
337                                 WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | CCS_NORESIZE | TBSTYLE_FLAT,\r
338                                 3,\r
339                                 2,\r
340                                 hInst,\r
341                                 remote_toolbar_bmp,\r
342                                 TbarDataRemote,\r
343                                 sizeof(TbarDataRemote)/sizeof(TBBUTTON),\r
344                                 16,16,\r
345                                 16,16,\r
346                                 sizeof(TBBUTTON));\r
347 \r
348         if(hWndTbarRemote != NULL)\r
349         {\r
350                 /* 2007/09/21 sunasunamix  ここから *********************/\r
351                 // 64ビット対応\r
352 //              pOldTbarRemoteProc = (WNDPROC)SetWindowLong(hWndTbarRemote, GWL_WNDPROC, (DWORD)CountermeasureTbarRemoteProc);\r
353                 pOldTbarRemoteProc = (WNDPROC)SetWindowLongPtr(hWndTbarRemote, GWLP_WNDPROC, (LONG_PTR)CountermeasureTbarRemoteProc);\r
354                 /********************************************* ここまで */\r
355 \r
356                 MoveWindow(hWndTbarRemote, LocalWidth + SepaWidth, TOOLWIN_HEIGHT, RemoteWidth, TOOLWIN_HEIGHT, FALSE);\r
357 \r
358                 /*===== ホストのディレクトリ名ウインドウ =====*/\r
359 \r
360                 SendMessage(hWndTbarRemote, TB_GETITEMRECT, 3, (LPARAM)&Rect1);\r
361                 hWndDirRemote = CreateWindowEx(WS_EX_CLIENTEDGE,\r
362                                         "COMBOBOX", "",\r
363                                         WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | CBS_DROPDOWN | CBS_AUTOHSCROLL,\r
364                                         Rect1.right, Rect1.top, RemoteWidth - Rect1.right, 200,\r
365                                         hWndTbarRemote, (HMENU)COMBO_REMOTE, hInst, NULL);\r
366 \r
367                 if(hWndDirRemote != NULL)\r
368                 {\r
369                         /* エディットコントロールを探す */\r
370                         hWndDirRemoteEdit = GetWindow(hWndDirRemote, GW_CHILD);\r
371                         if(hWndDirRemoteEdit != NULL)\r
372                                 // 64ビット対応\r
373 //                              HistEditBoxProcPtr = (WNDPROC)SetWindowLong(hWndDirRemoteEdit, GWL_WNDPROC, (LONG)HistEditBoxWndProc);\r
374                                 HistEditBoxProcPtr = (WNDPROC)SetWindowLongPtr(hWndDirRemoteEdit, GWLP_WNDPROC, (LONG_PTR)HistEditBoxWndProc);\r
375 \r
376                         SendMessage(hWndDirRemote, WM_SETFONT, (WPARAM)DlgFont, MAKELPARAM(TRUE, 0));\r
377                         SendMessage(hWndDirRemote, CB_LIMITTEXT, FMAX_PATH, 0);\r
378                         SendMessage(hWndDirRemote, CB_SETCURSEL, 0, 0);\r
379                 }\r
380         }\r
381 \r
382         Sts = FFFTP_SUCCESS;\r
383         if((hWndTbarMain == NULL) ||\r
384            (hWndTbarLocal == NULL) ||\r
385            (hWndTbarRemote == NULL) ||\r
386            (hWndDirLocal == NULL) ||\r
387            (hWndDirRemote == NULL))\r
388         {\r
389                 Sts = FFFTP_FAIL;\r
390         }\r
391         return(Sts);\r
392 }\r
393 \r
394 \r
395 \r
396 \r
397 \r
398 static LRESULT CALLBACK HistEditBoxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)\r
399 {\r
400         char Tmp[FMAX_PATH+1];\r
401 \r
402         switch (message)\r
403         {\r
404                 case WM_CHAR :\r
405                         if(wParam == 0x0D)              /* リターンキーが押された */\r
406                         {\r
407                                 if(hWnd == hWndDirLocalEdit)\r
408                                 {\r
409                                         SendMessage(hWndDirLocalEdit, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Tmp);\r
410                                         DoLocalCWD(Tmp);\r
411                                         GetLocalDirForWnd();\r
412                                 }\r
413                                 else\r
414                                 {\r
415                                         // 同時接続対応\r
416                                         CancelFlg = NO;\r
417                                         SendMessage(hWndDirRemoteEdit, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Tmp);\r
418                                         if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
419                                         {\r
420                                                 if(DoCWD(Tmp, YES, NO, YES) < FTP_RETRY)\r
421                                                         GetRemoteDirForWnd(CACHE_NORMAL, &CancelFlg);\r
422                                         }\r
423                                 }\r
424                         }\r
425                         else if(wParam == 0x09)         /* TABキーが押された */\r
426                         {\r
427                                 if(hWnd == hWndDirLocalEdit)\r
428                                 {\r
429                                         SetFocus(GetLocalHwnd());\r
430                                 }\r
431                                 else\r
432                                 {\r
433                                         SetFocus(GetRemoteHwnd());\r
434                                 }\r
435                         }\r
436                         else\r
437                                 return(CallWindowProc(HistEditBoxProcPtr, hWnd, message, wParam, lParam));\r
438                         break;\r
439 \r
440                 default :\r
441                         return(CallWindowProc(HistEditBoxProcPtr, hWnd, message, wParam, lParam));\r
442         }\r
443     return(0L);\r
444 }\r
445 \r
446 \r
447 \r
448 \r
449 /*----- ツールバーを削除 ------------------------------------------------------\r
450 *\r
451 *       Parameter\r
452 *               なし\r
453 *\r
454 *       Return Value\r
455 *               なし\r
456 *----------------------------------------------------------------------------*/\r
457 \r
458 void DeleteToolBarWindow(void)\r
459 {\r
460 //      if(DlgFont != NULL)\r
461 //              DeleteObject(DlgFont);\r
462 \r
463         if(hWndTbarMain != NULL)\r
464                 DestroyWindow(hWndTbarMain);\r
465         if(hWndTbarLocal != NULL)\r
466                 DestroyWindow(hWndTbarLocal);\r
467         if(hWndTbarRemote != NULL)\r
468                 DestroyWindow(hWndTbarRemote);\r
469         if(hWndDirLocal != NULL)\r
470                 DestroyWindow(hWndDirLocal);\r
471         if(hWndDirRemote != NULL)\r
472                 DestroyWindow(hWndDirRemote);\r
473         return;\r
474 }\r
475 \r
476 \r
477 /*----- メインのツールバーのウインドウハンドルを返す --------------------------\r
478 *\r
479 *       Parameter\r
480 *               なし\r
481 *\r
482 *       Return Value\r
483 *               HWND ウインドウハンドル\r
484 *----------------------------------------------------------------------------*/\r
485 \r
486 HWND GetMainTbarWnd(void)\r
487 {\r
488         return(hWndTbarMain);\r
489 }\r
490 \r
491 \r
492 /*----- ローカル側のヒストリウインドウのウインドウハンドルを返す --------------\r
493 *\r
494 *       Parameter\r
495 *               なし\r
496 *\r
497 *       Return Value\r
498 *               HWND ウインドウハンドル\r
499 *----------------------------------------------------------------------------*/\r
500 \r
501 HWND GetLocalHistHwnd(void)\r
502 {\r
503         return(hWndDirLocal);\r
504 }\r
505 \r
506 \r
507 /*----- ホスト側のヒストリウインドウのウインドウハンドルを返す ----------------\r
508 *\r
509 *       Parameter\r
510 *               なし\r
511 *\r
512 *       Return Value\r
513 *               HWND ウインドウハンドル\r
514 *----------------------------------------------------------------------------*/\r
515 \r
516 HWND GetRemoteHistHwnd(void)\r
517 {\r
518         return(hWndDirRemote);\r
519 }\r
520 \r
521 \r
522 /*----- ローカル側のヒストリエディットのウインドウハンドルを返す --------------\r
523 *\r
524 *       Parameter\r
525 *               なし\r
526 *\r
527 *       Return Value\r
528 *               HWND ウインドウハンドル\r
529 *----------------------------------------------------------------------------*/\r
530 \r
531 HWND GetLocalHistEditHwnd(void)\r
532 {\r
533         return(hWndDirLocalEdit);\r
534 }\r
535 \r
536 \r
537 /*----- ホスト側のヒストリエディットのウインドウハンドルを返す ----------------\r
538 *\r
539 *       Parameter\r
540 *               なし\r
541 *\r
542 *       Return Value\r
543 *               HWND ウインドウハンドル\r
544 *----------------------------------------------------------------------------*/\r
545 \r
546 HWND GetRemoteHistEditHwnd(void)\r
547 {\r
548         return(hWndDirRemoteEdit);\r
549 }\r
550 \r
551 \r
552 /*----- ローカル側のツールバーのウインドウハンドルを返す ----------------------\r
553 *\r
554 *       Parameter\r
555 *               なし\r
556 *\r
557 *       Return Value\r
558 *               HWND ウインドウハンドル\r
559 *----------------------------------------------------------------------------*/\r
560 \r
561 HWND GetLocalTbarWnd(void)\r
562 {\r
563         return(hWndTbarLocal);\r
564 }\r
565 \r
566 \r
567 /*----- ホスト側のツールバーのウインドウハンドルを返す ------------------------\r
568 *\r
569 *       Parameter\r
570 *               なし\r
571 *\r
572 *       Return Value\r
573 *               HWND ウインドウハンドル\r
574 *----------------------------------------------------------------------------*/\r
575 \r
576 HWND GetRemoteTbarWnd(void)\r
577 {\r
578         return(hWndTbarRemote);\r
579 }\r
580 \r
581 \r
582 /*----- HideUI の状態を返す ---------------------------------------------------\r
583 *\r
584 *       Parameter\r
585 *               なし\r
586 *\r
587 *       Return Value\r
588 *               int HideUI の状態\r
589 *----------------------------------------------------------------------------*/\r
590 \r
591 int GetHideUI(void)\r
592 {\r
593         // デッドロック対策\r
594 //      return(HideUI);\r
595         return (HideUI > 0 ? YES : NO);\r
596 }\r
597 \r
598 \r
599 /*----- ツールボタン/メニューのハイド処理 ------------------------------------\r
600 *\r
601 *       Parameter\r
602 *               なし\r
603 *\r
604 *       Return Value\r
605 *               なし\r
606 *----------------------------------------------------------------------------*/\r
607 \r
608 void MakeButtonsFocus(void)\r
609 {\r
610         HWND hWndFocus;\r
611         HWND hWndMain;\r
612         int Count;\r
613         int Win;\r
614 \r
615         // デッドロック対策\r
616 //      if(HideUI == NO)\r
617         if(HideUI == 0)\r
618         {\r
619                 hWndMain = GetMainHwnd();\r
620                 hWndFocus = GetFocus();\r
621                 Win = WIN_LOCAL;\r
622                 if(hWndFocus == GetRemoteHwnd())\r
623                         Win = WIN_REMOTE;\r
624 \r
625                 Count = GetSelectedCount(Win);\r
626 \r
627                 if(AskConnecting() == YES)\r
628                 {\r
629                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD, MF_ENABLED);\r
630                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD_LOCAL, MF_ENABLED);\r
631                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD_BOTH, MF_ENABLED);\r
632                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_EDIT, MF_ENABLED);\r
633                         EnableMenuItem(GetMenu(hWndMain), MENU_DIRINFO, MF_ENABLED);\r
634                         EnableMenuItem(GetMenu(hWndMain), MENU_MIRROR_UPLOAD, MF_ENABLED);\r
635                         EnableMenuItem(GetMenu(hWndMain), MENU_MIRROR_DOWNLOAD, MF_ENABLED);\r
636                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_NAME, MF_ENABLED);\r
637                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MIRROR_UPLOAD, MAKELONG(TRUE, 0));\r
638                 }\r
639                 else\r
640                 {\r
641                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD, MF_GRAYED);\r
642                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD_LOCAL, MF_GRAYED);\r
643                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_ADD_BOTH, MF_GRAYED);\r
644                         EnableMenuItem(GetMenu(hWndMain), MENU_BMARK_EDIT, MF_GRAYED);\r
645                         EnableMenuItem(GetMenu(hWndMain), MENU_DIRINFO, MF_GRAYED);\r
646                         EnableMenuItem(GetMenu(hWndMain), MENU_MIRROR_UPLOAD, MF_GRAYED);\r
647                         EnableMenuItem(GetMenu(hWndMain), MENU_MIRROR_DOWNLOAD, MF_GRAYED);\r
648                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_NAME, MF_GRAYED);\r
649                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MIRROR_UPLOAD, MAKELONG(FALSE, 0));\r
650                 }\r
651 \r
652                 if(hWndFocus == GetLocalHwnd())\r
653                 {\r
654                         if((AskConnecting() == YES) && (Count > 0))\r
655                         {\r
656                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_UPLOAD, MAKELONG(TRUE, 0));\r
657                                 EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD, MF_ENABLED);\r
658                                 EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD_AS, MF_ENABLED);\r
659                         }\r
660                         else\r
661                         {\r
662                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_UPLOAD, MAKELONG(FALSE, 0));\r
663                                 EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD, MF_GRAYED);\r
664                                 EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD_AS, MF_GRAYED);\r
665                         }\r
666                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DOWNLOAD, MAKELONG(FALSE, 0));\r
667                         EnableMenuItem(GetMenu(hWndMain), MENU_SOMECMD, MF_GRAYED);\r
668                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD, MF_GRAYED);\r
669                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS, MF_GRAYED);\r
670                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS_FILE, MF_GRAYED);\r
671                 }\r
672 \r
673                 if(hWndFocus == GetRemoteHwnd())\r
674                 {\r
675                         if(AskConnecting() == YES)\r
676                         {\r
677                                 EnableMenuItem(GetMenu(hWndMain), MENU_SOMECMD, MF_ENABLED);\r
678                         }\r
679                         else\r
680                         {\r
681                                 EnableMenuItem(GetMenu(hWndMain), MENU_SOMECMD, MF_GRAYED);\r
682                         }\r
683 \r
684                         if((AskConnecting() == YES) && (Count > 0))\r
685                         {\r
686                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DOWNLOAD, MAKELONG(TRUE, 0));\r
687                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD, MF_ENABLED);\r
688                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS, MF_ENABLED);\r
689                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS_FILE, MF_ENABLED);\r
690                         }\r
691                         else\r
692                         {\r
693                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DOWNLOAD, MAKELONG(FALSE, 0));\r
694                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD, MF_GRAYED);\r
695                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS, MF_GRAYED);\r
696                                 EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS_FILE, MF_GRAYED);\r
697                         }\r
698                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_UPLOAD, MAKELONG(FALSE, 0));\r
699                         EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD, MF_GRAYED);\r
700                         EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD_AS, MF_GRAYED);\r
701                 }\r
702 \r
703                 if((hWndFocus == GetLocalHwnd()) || (hWndFocus == GetRemoteHwnd()))\r
704                 {\r
705                         if(Count > 0)\r
706                         {\r
707                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DELETE, MAKELONG(TRUE, 0));\r
708                                 EnableMenuItem(GetMenu(hWndMain), MENU_DELETE, MF_ENABLED);\r
709                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_RENAME, MAKELONG(TRUE, 0));\r
710                                 EnableMenuItem(GetMenu(hWndMain), MENU_RENAME, MF_ENABLED);\r
711 \r
712                                 EnableMenuItem(GetMenu(hWndMain), MENU_CHMOD, MF_ENABLED);\r
713 \r
714                         }\r
715                         else\r
716                         {\r
717                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DELETE, MAKELONG(FALSE, 0));\r
718                                 EnableMenuItem(GetMenu(hWndMain), MENU_DELETE, MF_GRAYED);\r
719                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_RENAME, MAKELONG(FALSE, 0));\r
720                                 EnableMenuItem(GetMenu(hWndMain), MENU_RENAME, MF_GRAYED);\r
721 \r
722                                 EnableMenuItem(GetMenu(hWndMain), MENU_CHMOD, MF_GRAYED);\r
723                         }\r
724 \r
725                         if((hWndFocus == GetLocalHwnd()) || (AskConnecting() == YES))\r
726                         {\r
727                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MKDIR, MAKELONG(TRUE, 0));\r
728                                 EnableMenuItem(GetMenu(hWndMain), MENU_MKDIR, MF_ENABLED);\r
729                                 EnableMenuItem(GetMenu(hWndMain), MENU_FILESIZE, MF_ENABLED);\r
730                         }\r
731                         else\r
732                         {\r
733                                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MKDIR, MAKELONG(FALSE, 0));\r
734                                 EnableMenuItem(GetMenu(hWndMain), MENU_MKDIR, MF_GRAYED);\r
735                                 EnableMenuItem(GetMenu(hWndMain), MENU_FILESIZE, MF_GRAYED);\r
736                         }\r
737                 }\r
738                 else\r
739                 {\r
740                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_UPLOAD, MAKELONG(FALSE, 0));\r
741                         EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD, MF_GRAYED);\r
742                         EnableMenuItem(GetMenu(hWndMain), MENU_UPLOAD_AS, MF_GRAYED);\r
743                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DOWNLOAD, MAKELONG(FALSE, 0));\r
744                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD, MF_GRAYED);\r
745                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS, MF_GRAYED);\r
746                         EnableMenuItem(GetMenu(hWndMain), MENU_DOWNLOAD_AS_FILE, MF_GRAYED);\r
747                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_DELETE, MAKELONG(FALSE, 0));\r
748                         EnableMenuItem(GetMenu(hWndMain), MENU_DELETE, MF_GRAYED);\r
749                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_RENAME, MAKELONG(FALSE, 0));\r
750                         EnableMenuItem(GetMenu(hWndMain), MENU_RENAME, MF_GRAYED);\r
751                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_MKDIR, MAKELONG(FALSE, 0));\r
752                         EnableMenuItem(GetMenu(hWndMain), MENU_MKDIR, MF_GRAYED);\r
753                         EnableMenuItem(GetMenu(hWndMain), MENU_CHMOD, MF_GRAYED);\r
754                         EnableMenuItem(GetMenu(hWndMain), MENU_FILESIZE, MF_GRAYED);\r
755                         EnableMenuItem(GetMenu(hWndMain), MENU_SOMECMD, MF_GRAYED);\r
756                 }\r
757         }\r
758         return;\r
759 }\r
760 \r
761 \r
762 /*----- ユーザの操作を禁止する ------------------------------------------------\r
763 *\r
764 *       Parameter\r
765 *               なし\r
766 *\r
767 *       Return Value\r
768 *               なし\r
769 *----------------------------------------------------------------------------*/\r
770 \r
771 void DisableUserOpe(void)\r
772 {\r
773         int i;\r
774 \r
775         // デッドロック対策\r
776 //      HideUI = YES;\r
777         HideUI++;\r
778 \r
779         for(i = 0; i < sizeof(HideMenus) / sizeof(int); i++)\r
780         {\r
781                 EnableMenuItem(GetMenu(GetMainHwnd()), HideMenus[i], MF_GRAYED);\r
782                 SendMessage(hWndTbarMain, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(FALSE, 0));\r
783                 SendMessage(hWndTbarLocal, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(FALSE, 0));\r
784                 SendMessage(hWndTbarRemote, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(FALSE, 0));\r
785         }\r
786 \r
787         EnableWindow(hWndDirLocal, FALSE);\r
788         EnableWindow(hWndDirRemote, FALSE);\r
789 \r
790         return;\r
791 }\r
792 \r
793 \r
794 /*----- ユーザの操作を許可する ------------------------------------------------\r
795 *\r
796 *       Parameter\r
797 *               なし\r
798 *\r
799 *       Return Value\r
800 *               なし\r
801 *----------------------------------------------------------------------------*/\r
802 \r
803 void EnableUserOpe(void)\r
804 {\r
805         int i;\r
806 \r
807         // デッドロック対策\r
808 //      if(HideUI == YES)\r
809         if(HideUI > 0)\r
810                 HideUI--;\r
811         if(HideUI == 0)\r
812         {\r
813                 for(i = 0; i < sizeof(HideMenus) / sizeof(int); i++)\r
814                 {\r
815                         EnableMenuItem(GetMenu(GetMainHwnd()), HideMenus[i], MF_ENABLED);\r
816                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(TRUE, 0));\r
817                         SendMessage(hWndTbarLocal, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(TRUE, 0));\r
818                         SendMessage(hWndTbarRemote, TB_ENABLEBUTTON, HideMenus[i], MAKELONG(TRUE, 0));\r
819                 }\r
820                 EnableWindow(hWndDirLocal, TRUE);\r
821                 EnableWindow(hWndDirRemote, TRUE);\r
822 \r
823                 // 選択不可な漢字コードのボタンが表示されるバグを修正\r
824                 HideHostKanjiButton();\r
825                 HideLocalKanjiButton();\r
826 \r
827                 // バグ修正\r
828 //              HideUI = NO;\r
829 \r
830                 MakeButtonsFocus();\r
831         }\r
832         return;\r
833 }\r
834 \r
835 \r
836 /*----- ユーザの操作が禁止されているかどうかを返す ----------------------------\r
837 *\r
838 *       Parameter\r
839 *               なし\r
840 *\r
841 *       Return Value\r
842 *               int ステータス\r
843 *                       YES=禁止されている/NO\r
844 *----------------------------------------------------------------------------*/\r
845 \r
846 int AskUserOpeDisabled(void)\r
847 {\r
848         // デッドロック対策\r
849 //      return(HideUI);\r
850         return (HideUI > 0 ? YES : NO);\r
851 }\r
852 \r
853 \r
854 /*===================================================\r
855 *                       転送モード\r
856 *===================================================*/\r
857 \r
858 /*----- 転送モードを設定する --------------------------------------------------\r
859 *\r
860 *       Parameter\r
861 *               int Mode : 転送モード (TYPE_xx)\r
862 *\r
863 *       Return Value\r
864 *               なし\r
865 *----------------------------------------------------------------------------*/\r
866 \r
867 void SetTransferTypeImm(int Mode)\r
868 {\r
869         TmpTransMode = Mode;\r
870         HideHostKanjiButton();\r
871         HideLocalKanjiButton();\r
872         return;\r
873 }\r
874 \r
875 \r
876 /*----- メニューにより転送モードを設定する ------------------------------------\r
877 *\r
878 *       Parameter\r
879 *               int Type : 転送モード (MENU_xxxx)\r
880 *\r
881 *       Return Value\r
882 *               なし\r
883 *----------------------------------------------------------------------------*/\r
884 \r
885 void SetTransferType(int Type)\r
886 {\r
887         switch(Type)\r
888         {\r
889                 case MENU_TEXT :\r
890                         TmpTransMode = TYPE_A;\r
891                         break;\r
892 \r
893                 case MENU_BINARY :\r
894                         TmpTransMode = TYPE_I;\r
895                         break;\r
896 \r
897                 default :\r
898                         TmpTransMode = TYPE_X;\r
899                         break;\r
900         }\r
901         HideHostKanjiButton();\r
902         HideLocalKanjiButton();\r
903         return;\r
904 }\r
905 \r
906 \r
907 /*----- 転送モードにしたがってボタンを表示する --------------------------------\r
908 *\r
909 *       Parameter\r
910 *               なし\r
911 *\r
912 *       Return Value\r
913 *               なし\r
914 *----------------------------------------------------------------------------*/\r
915 \r
916 void DispTransferType(void)\r
917 {\r
918         switch(TmpTransMode)\r
919         {\r
920                 case TYPE_A :\r
921                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_TEXT, MAKELONG(TRUE, 0));\r
922                         break;\r
923 \r
924                 case TYPE_I :\r
925                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_BINARY, MAKELONG(TRUE, 0));\r
926                         break;\r
927 \r
928                 default :\r
929                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_AUTO, MAKELONG(TRUE, 0));\r
930                         break;\r
931         }\r
932         return;\r
933 }\r
934 \r
935 \r
936 /*----- 設定上の転送モードを返す ----------------------------------------------\r
937 *\r
938 *       Parameter\r
939 *               なし\r
940 *\r
941 *       Return Value\r
942 *               int 転送モード (TYPE_xx)\r
943 *----------------------------------------------------------------------------*/\r
944 \r
945 int AskTransferType(void)\r
946 {\r
947         return(TmpTransMode);\r
948 }\r
949 \r
950 \r
951 /*----- 実際の転送モードを返す ------------------------------------------------\r
952 *\r
953 *       Parameter\r
954 *               char Fname : ファイル名\r
955 *               int Type : 設定上の転送モード (TYPE_xx)\r
956 *\r
957 *       Return Value\r
958 *               int 転送モード (TYPE_xx)\r
959 *----------------------------------------------------------------------------*/\r
960 \r
961 int AskTransferTypeAssoc(char *Fname, int Type)\r
962 {\r
963         int Ret;\r
964         char *Pos;\r
965         char *Name;\r
966 \r
967         Ret = Type;\r
968         if(Ret == TYPE_X)\r
969         {\r
970                 Ret = TYPE_I;\r
971                 if(StrMultiLen(AsciiExt) > 0)\r
972                 {\r
973                         Name = GetFileName(Fname);\r
974                         Pos = AsciiExt;\r
975                         while(*Pos != NUL)\r
976                         {\r
977                                 if(CheckFname(Name, Pos) == FFFTP_SUCCESS)\r
978                                 {\r
979                                         Ret = TYPE_A;\r
980                                         break;\r
981                                 }\r
982                                 Pos += strlen(Pos) + 1;\r
983                         }\r
984                 }\r
985         }\r
986         return(Ret);\r
987 }\r
988 \r
989 \r
990 /*----- 転送モードを保存する --------------------------------------------------\r
991 *\r
992 *       Parameter\r
993 *               なし\r
994 *\r
995 *       Return Value\r
996 *               なし\r
997 *\r
998 *       Note\r
999 *               現在の転送モードがレジストリに保存される\r
1000 *----------------------------------------------------------------------------*/\r
1001 \r
1002 void SaveTransferType(void)\r
1003 {\r
1004         TransMode = TmpTransMode;\r
1005         return;\r
1006 }\r
1007 \r
1008 \r
1009 /*===================================================\r
1010 *                       漢字モード\r
1011 *===================================================*/\r
1012 \r
1013 /*----- ホストの漢字モードをセットする ----------------------------------------\r
1014 *\r
1015 *       Parameter\r
1016 *               int Mode : 漢字モード (KANJI_xxxx)\r
1017 *\r
1018 *       Return Value\r
1019 *               なし\r
1020 *----------------------------------------------------------------------------*/\r
1021 \r
1022 void SetHostKanjiCodeImm(int Mode)\r
1023 {\r
1024         TmpHostKanjiCode = Mode;\r
1025         DispHostKanjiCode();\r
1026         HideHostKanjiButton();\r
1027         return;\r
1028 }\r
1029 \r
1030 \r
1031 /*----- メニューによりホストの漢字モードを設定する -----------------------------\r
1032 *\r
1033 *       Parameter\r
1034 *               int Type : 漢字モード (MENU_xxxx)\r
1035 *\r
1036 *       Return Value\r
1037 *               なし\r
1038 *----------------------------------------------------------------------------*/\r
1039 \r
1040 void SetHostKanjiCode(int Type)\r
1041 {\r
1042         switch(Type)\r
1043         {\r
1044                 // UTF-8対応\r
1045                 case MENU_KNJ_SJIS :\r
1046                         TmpHostKanjiCode = KANJI_SJIS;\r
1047                         break;\r
1048 \r
1049                 case MENU_KNJ_EUC :\r
1050                         TmpHostKanjiCode = KANJI_EUC;\r
1051                         break;\r
1052 \r
1053                 case MENU_KNJ_JIS :\r
1054                         TmpHostKanjiCode = KANJI_JIS;\r
1055                         break;\r
1056 \r
1057                 case MENU_KNJ_UTF8N :\r
1058                         TmpHostKanjiCode = KANJI_UTF8N;\r
1059                         break;\r
1060 \r
1061                 case MENU_KNJ_UTF8BOM :\r
1062                         TmpHostKanjiCode = KANJI_UTF8BOM;\r
1063                         break;\r
1064 \r
1065                 default :\r
1066                         TmpHostKanjiCode = KANJI_NOCNV;\r
1067                         break;\r
1068         }\r
1069         DispHostKanjiCode();\r
1070         HideHostKanjiButton();\r
1071         return;\r
1072 }\r
1073 \r
1074 \r
1075 /*----- ホストの漢字モードにしたがってボタンを表示する ------------------------\r
1076 *\r
1077 *       Parameter\r
1078 *               なし\r
1079 *\r
1080 *       Return Value\r
1081 *               なし\r
1082 *----------------------------------------------------------------------------*/\r
1083 \r
1084 void DispHostKanjiCode(void)\r
1085 {\r
1086         switch(TmpHostKanjiCode)\r
1087         {\r
1088                 // UTF-8対応\r
1089                 case KANJI_SJIS :\r
1090                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_SJIS, MAKELONG(TRUE, 0));\r
1091                         break;\r
1092 \r
1093                 case KANJI_EUC :\r
1094                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_EUC, MAKELONG(TRUE, 0));\r
1095                         break;\r
1096 \r
1097                 case KANJI_JIS :\r
1098                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_JIS, MAKELONG(TRUE, 0));\r
1099                         break;\r
1100 \r
1101                 case KANJI_UTF8N :\r
1102                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_UTF8N, MAKELONG(TRUE, 0));\r
1103                         break;\r
1104 \r
1105                 case KANJI_UTF8BOM :\r
1106                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_UTF8BOM, MAKELONG(TRUE, 0));\r
1107                         break;\r
1108 \r
1109                 default :\r
1110                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KNJ_NONE, MAKELONG(TRUE, 0));\r
1111                         break;\r
1112         }\r
1113         return;\r
1114 }\r
1115 \r
1116 \r
1117 /*----- ホストの漢字モードを返す ----------------------------------------------\r
1118 *\r
1119 *       Parameter\r
1120 *               なし\r
1121 *\r
1122 *       Return Value\r
1123 *               int 漢字モード (KANJI_xxxx)\r
1124 *----------------------------------------------------------------------------*/\r
1125 \r
1126 int AskHostKanjiCode(void)\r
1127 {\r
1128         return(TmpHostKanjiCode);\r
1129 }\r
1130 \r
1131 \r
1132 /*----- 漢字モードボタンのハイド処理を行う ------------------------------------\r
1133 *\r
1134 *       Parameter\r
1135 *               なし\r
1136 *\r
1137 *       Return Value\r
1138 *               なし\r
1139 *----------------------------------------------------------------------------*/\r
1140 \r
1141 void HideHostKanjiButton(void)\r
1142 {\r
1143         switch(TmpTransMode)\r
1144         {\r
1145                 // UTF-8対応\r
1146                 case TYPE_I : \r
1147                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_SJIS, MAKELONG(FALSE, 0));\r
1148                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_EUC, MAKELONG(FALSE, 0));\r
1149                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_JIS, MAKELONG(FALSE, 0));\r
1150                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_UTF8N, MAKELONG(FALSE, 0));\r
1151                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_UTF8BOM, MAKELONG(FALSE, 0));\r
1152                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_NONE, MAKELONG(FALSE, 0));\r
1153                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1154                         break;\r
1155 \r
1156                 default :\r
1157                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_SJIS, MAKELONG(TRUE, 0));\r
1158                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_EUC, MAKELONG(TRUE, 0));\r
1159                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_JIS, MAKELONG(TRUE, 0));\r
1160                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_UTF8N, MAKELONG(TRUE, 0));\r
1161                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_UTF8BOM, MAKELONG(TRUE, 0));\r
1162                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_NONE, MAKELONG(TRUE, 0));\r
1163 //                      if(TmpHostKanjiCode != KANJI_NOCNV)\r
1164 //                              SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0));\r
1165 //                      else\r
1166 //                              SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1167 //                      break;\r
1168                         // 現在カナ変換はShift_JIS、JIS、EUC間でのみ機能する\r
1169                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1170                         switch(TmpHostKanjiCode)\r
1171                         {\r
1172                         case KANJI_SJIS:\r
1173                         case KANJI_JIS:\r
1174                         case KANJI_EUC:\r
1175                                 switch(TmpLocalKanjiCode)\r
1176                                 {\r
1177                                 case KANJI_SJIS:\r
1178                                 case KANJI_JIS:\r
1179                                 case KANJI_EUC:\r
1180                                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0));\r
1181                                         break;\r
1182                                 }\r
1183                                 break;\r
1184                         }\r
1185         }\r
1186         return;\r
1187 }\r
1188 \r
1189 \r
1190 // ローカルの漢字コード\r
1191 // テキストモード転送時に使用\r
1192 // ホスト側が無変換の時はローカルも無変換\r
1193 \r
1194 void SetLocalKanjiCodeImm(int Mode)\r
1195 {\r
1196         TmpLocalKanjiCode = Mode;\r
1197         DispLocalKanjiCode();\r
1198         HideLocalKanjiButton();\r
1199         return;\r
1200 }\r
1201 \r
1202 void SetLocalKanjiCode(int Type)\r
1203 {\r
1204         switch(Type)\r
1205         {\r
1206                 // UTF-8対応\r
1207                 case MENU_L_KNJ_SJIS :\r
1208                         TmpLocalKanjiCode = KANJI_SJIS;\r
1209                         break;\r
1210 \r
1211                 case MENU_L_KNJ_EUC :\r
1212                         TmpLocalKanjiCode = KANJI_EUC;\r
1213                         break;\r
1214 \r
1215                 case MENU_L_KNJ_JIS :\r
1216                         TmpLocalKanjiCode = KANJI_JIS;\r
1217                         break;\r
1218 \r
1219                 case MENU_L_KNJ_UTF8N :\r
1220                         TmpLocalKanjiCode = KANJI_UTF8N;\r
1221                         break;\r
1222 \r
1223                 case MENU_L_KNJ_UTF8BOM :\r
1224                         TmpLocalKanjiCode = KANJI_UTF8BOM;\r
1225                         break;\r
1226         }\r
1227         DispLocalKanjiCode();\r
1228         HideLocalKanjiButton();\r
1229         return;\r
1230 }\r
1231 \r
1232 void DispLocalKanjiCode(void)\r
1233 {\r
1234         switch(TmpLocalKanjiCode)\r
1235         {\r
1236                 // UTF-8対応\r
1237                 case KANJI_SJIS :\r
1238                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_SJIS, MAKELONG(TRUE, 0));\r
1239                         break;\r
1240 \r
1241                 case KANJI_EUC :\r
1242                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_EUC, MAKELONG(TRUE, 0));\r
1243                         break;\r
1244 \r
1245                 case KANJI_JIS :\r
1246                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_JIS, MAKELONG(TRUE, 0));\r
1247                         break;\r
1248 \r
1249                 case KANJI_UTF8N :\r
1250                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_UTF8N, MAKELONG(TRUE, 0));\r
1251                         break;\r
1252 \r
1253                 case KANJI_UTF8BOM :\r
1254                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_UTF8BOM, MAKELONG(TRUE, 0));\r
1255                         break;\r
1256         }\r
1257         return;\r
1258 }\r
1259 \r
1260 int AskLocalKanjiCode(void)\r
1261 {\r
1262         return(TmpLocalKanjiCode);\r
1263 }\r
1264 \r
1265 void HideLocalKanjiButton(void)\r
1266 {\r
1267         switch(TmpTransMode)\r
1268         {\r
1269                 // UTF-8対応\r
1270                 case TYPE_I : \r
1271                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_SJIS, MAKELONG(FALSE, 0));\r
1272                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_EUC, MAKELONG(FALSE, 0));\r
1273                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_JIS, MAKELONG(FALSE, 0));\r
1274                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_UTF8N, MAKELONG(FALSE, 0));\r
1275                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_UTF8BOM, MAKELONG(FALSE, 0));\r
1276                         break;\r
1277 \r
1278                 default :\r
1279                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_SJIS, MAKELONG(TRUE, 0));\r
1280                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_EUC, MAKELONG(TRUE, 0));\r
1281                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_JIS, MAKELONG(TRUE, 0));\r
1282                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_UTF8N, MAKELONG(TRUE, 0));\r
1283                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_UTF8BOM, MAKELONG(TRUE, 0));\r
1284                         // 現在カナ変換はShift_JIS、JIS、EUC間でのみ機能する\r
1285                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1286                         switch(TmpHostKanjiCode)\r
1287                         {\r
1288                         case KANJI_SJIS:\r
1289                         case KANJI_JIS:\r
1290                         case KANJI_EUC:\r
1291                                 switch(TmpLocalKanjiCode)\r
1292                                 {\r
1293                                 case KANJI_SJIS:\r
1294                                 case KANJI_JIS:\r
1295                                 case KANJI_EUC:\r
1296                                         SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0));\r
1297                                         break;\r
1298                                 }\r
1299                                 break;\r
1300                         }\r
1301                         break;\r
1302         }\r
1303         return;\r
1304 }\r
1305 \r
1306 \r
1307 /*===================================================\r
1308 *                       半角変換モード\r
1309 *===================================================*/\r
1310 \r
1311 /*----- ホストの半角変換モードを設定する --------------------------------------\r
1312 *\r
1313 *       Parameter\r
1314 *               int Mode : 半角変換モード(YES/NO)\r
1315 *\r
1316 *       Return Value\r
1317 *               なし\r
1318 *----------------------------------------------------------------------------*/\r
1319 \r
1320 void SetHostKanaCnvImm(int Mode)\r
1321 {\r
1322         TmpHostKanaCnv = Mode;\r
1323         DispHostKanaCnv();\r
1324         return;\r
1325 }\r
1326 \r
1327 \r
1328 /*----- ホストの半角変換モードを反転する --------------------------------------\r
1329 *\r
1330 *       Parameter\r
1331 *               なし\r
1332 *\r
1333 *       Return Value\r
1334 *               なし\r
1335 *----------------------------------------------------------------------------*/\r
1336 \r
1337 void SetHostKanaCnv(void)\r
1338 {\r
1339         TmpHostKanaCnv ^= 1;\r
1340         DispHostKanaCnv();\r
1341         return;\r
1342 }\r
1343 \r
1344 \r
1345 /*----- ホストの半角変換モードにしたがってボタンを表示する --------------------\r
1346 *\r
1347 *       Parameter\r
1348 *               なし\r
1349 *\r
1350 *       Return Value\r
1351 *               なし\r
1352 *----------------------------------------------------------------------------*/\r
1353 \r
1354 void DispHostKanaCnv(void)\r
1355 {\r
1356         if(TmpHostKanaCnv != 0)\r
1357                 SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0));\r
1358         else\r
1359                 SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0));\r
1360         return;\r
1361 }\r
1362 \r
1363 \r
1364 /*----- ホストの半角変換モードを返す ------------------------------------------\r
1365 *\r
1366 *       Parameter\r
1367 *               なし\r
1368 *\r
1369 *       Return Value\r
1370 *               int 半角変換モード\r
1371 *----------------------------------------------------------------------------*/\r
1372 \r
1373 int AskHostKanaCnv(void)\r
1374 {\r
1375         return(TmpHostKanaCnv);\r
1376 }\r
1377 \r
1378 \r
1379 /*===================================================\r
1380 *                       ソート方法\r
1381 *===================================================*/\r
1382 \r
1383 /*----- ソート方法をセットする ------------------------------------------------\r
1384 *\r
1385 *       Parameter\r
1386 *               int LFsort : ローカル側のファイルのソート方法 (SORT_xxx)\r
1387 *               int LDsort : ローカル側のディレクトリのソート方法 (SORT_xxx)\r
1388 *               int RFsort : ホスト側のファイルのソート方法 (SORT_xxx)\r
1389 *               int RDsort : ホスト側のディレクトリのソート方法 (SORT_xxx)\r
1390 *\r
1391 *       Return Value\r
1392 *               なし\r
1393 *----------------------------------------------------------------------------*/\r
1394 \r
1395 void SetSortTypeImm(int LFsort, int LDsort, int RFsort, int RDsort)\r
1396 {\r
1397         TmpLocalFileSort = LFsort;\r
1398         TmpLocalDirSort = LDsort;\r
1399         TmpRemoteFileSort = RFsort;\r
1400         TmpRemoteDirSort = RDsort;\r
1401         return;\r
1402 }\r
1403 \r
1404 \r
1405 /*----- リストビューのタブクリックによるソート方法のセット --------------------\r
1406 *\r
1407 *       Parameter\r
1408 *               int Win : ウインドウ番号\r
1409 *               int Tab : カラム番号\r
1410 *\r
1411 *       Return Value\r
1412 *               int ソート方法 (SORT_xxx)\r
1413 *----------------------------------------------------------------------------*/\r
1414 \r
1415 void SetSortTypeByColumn(int Win, int Tab)\r
1416 {\r
1417         if(Win == WIN_LOCAL)\r
1418         {\r
1419                 if((TmpLocalFileSort & SORT_MASK_ORD) == Tab)\r
1420                         TmpLocalFileSort ^= SORT_GET_ORD;\r
1421                 else\r
1422                         TmpLocalFileSort = Tab;\r
1423 \r
1424                 if((Tab == SORT_NAME) || (Tab == SORT_DATE))\r
1425                         TmpLocalDirSort = TmpLocalFileSort;\r
1426                 else\r
1427                         TmpLocalDirSort = SORT_NAME;\r
1428         }\r
1429         else\r
1430         {\r
1431                 if(Tab != 4)\r
1432                 {\r
1433                         if((TmpRemoteFileSort & SORT_MASK_ORD) == Tab)\r
1434                                 TmpRemoteFileSort ^= SORT_GET_ORD;\r
1435                         else\r
1436                                 TmpRemoteFileSort = Tab;\r
1437 \r
1438                         if((Tab == SORT_NAME) || (Tab == SORT_DATE))\r
1439                                 TmpRemoteDirSort = TmpRemoteFileSort;\r
1440                         else\r
1441                                 TmpRemoteDirSort = SORT_NAME;\r
1442                 }\r
1443         }\r
1444         return;\r
1445 }\r
1446 \r
1447 \r
1448 /*----- ソート方法を返す ------------------------------------------------------\r
1449 *\r
1450 *       Parameter\r
1451 *               int Name : どの部分か (ITEM_xxx)\r
1452 *\r
1453 *       Return Value\r
1454 *               int ソート方法 (SORT_xxx)\r
1455 *----------------------------------------------------------------------------*/\r
1456 \r
1457 int AskSortType(int Name)\r
1458 {\r
1459         int Ret;\r
1460 \r
1461         switch(Name)\r
1462         {\r
1463                 case ITEM_LFILE :\r
1464                         Ret = TmpLocalFileSort;\r
1465                         break;\r
1466 \r
1467                 case ITEM_LDIR :\r
1468                         Ret = TmpLocalDirSort;\r
1469                         break;\r
1470 \r
1471                 case ITEM_RFILE :\r
1472                         Ret = TmpRemoteFileSort;\r
1473                         break;\r
1474 \r
1475                 case ITEM_RDIR :\r
1476                         Ret = TmpRemoteDirSort;\r
1477                         break;\r
1478         }\r
1479         return(Ret);\r
1480 }\r
1481 \r
1482 \r
1483 /*----- ホストごとにソートを保存するかどうかをセットする-----------------------\r
1484 *\r
1485 *       Parameter\r
1486 *               int Sw : スイッチ (YES/NO)\r
1487 *\r
1488 *       Return Value\r
1489 *               なし\r
1490 *----------------------------------------------------------------------------*/\r
1491 \r
1492 void SetSaveSortToHost(int Sw)\r
1493 {\r
1494         SortSave = Sw;\r
1495         return;\r
1496 }\r
1497 \r
1498 \r
1499 /*----- ホストごとにソートを保存するかどうかを返す ----------------------------\r
1500 *\r
1501 *       Parameter\r
1502 *               なし\r
1503 *\r
1504 *       Return Value\r
1505 *               int スイッチ (YES/NO)\r
1506 *----------------------------------------------------------------------------*/\r
1507 \r
1508 int AskSaveSortToHost(void)\r
1509 {\r
1510         return(SortSave);\r
1511 }\r
1512 \r
1513 \r
1514 \r
1515 /*===================================================\r
1516 *                       リストモード\r
1517 *===================================================*/\r
1518 \r
1519 /*----- リストモードにしたがってボタンを表示する ------------------------------\r
1520 *\r
1521 *       Parameter\r
1522 *               なし\r
1523 *\r
1524 *       Return Value\r
1525 *               なし\r
1526 *----------------------------------------------------------------------------*/\r
1527 \r
1528 void DispListType(void)\r
1529 {\r
1530         HWND hWndMain;\r
1531 \r
1532         hWndMain = GetMainHwnd();\r
1533         switch(ListType)\r
1534         {\r
1535                 case LVS_LIST :\r
1536                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_LIST, MAKELONG(TRUE, 0));\r
1537                         CheckMenuItem(GetMenu(hWndMain), MENU_LIST, MF_CHECKED);\r
1538                         CheckMenuItem(GetMenu(hWndMain), MENU_REPORT, MF_UNCHECKED);\r
1539                         break;\r
1540 \r
1541                 default :\r
1542                         SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_REPORT, MAKELONG(TRUE, 0));\r
1543                         CheckMenuItem(GetMenu(hWndMain), MENU_REPORT, MF_CHECKED);\r
1544                         CheckMenuItem(GetMenu(hWndMain), MENU_LIST, MF_UNCHECKED);\r
1545                         break;\r
1546         }\r
1547         return;\r
1548 }\r
1549 \r
1550 \r
1551 /*===================================================\r
1552 *                       フォルダ同時移動モード\r
1553 *===================================================*/\r
1554 \r
1555 /*----- 転送モードを設定する --------------------------------------------------\r
1556 *\r
1557 *       Parameter\r
1558 *               int Mode : 転送モード (TYPE_xx)\r
1559 *\r
1560 *       Return Value\r
1561 *               なし\r
1562 *----------------------------------------------------------------------------*/\r
1563 \r
1564 void SetSyncMoveMode(int Mode)\r
1565 {\r
1566         SyncMove = Mode;\r
1567         DispSyncMoveMode();\r
1568         return;\r
1569 }\r
1570 \r
1571 \r
1572 /*----- フォルダ同時移動モードを切り替える ------------------------------------\r
1573 *\r
1574 *       Parameter\r
1575 *               なし\r
1576 *\r
1577 *       Return Value\r
1578 *               なし\r
1579 *----------------------------------------------------------------------------*/\r
1580 \r
1581 void ToggleSyncMoveMode(void)\r
1582 {\r
1583         SyncMove ^= 1;\r
1584         DispSyncMoveMode();\r
1585         return;\r
1586 }\r
1587 \r
1588 \r
1589 /*----- フォルダ同時移動を行うかどうかをによってメニュー/ボタンを表示 --------\r
1590 *\r
1591 *       Parameter\r
1592 *               なし\r
1593 *\r
1594 *       Return Value\r
1595 *               なし\r
1596 *----------------------------------------------------------------------------*/\r
1597 \r
1598 void DispSyncMoveMode(void)\r
1599 {\r
1600         if(SyncMove != 0)\r
1601         {\r
1602                 SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_SYNC, MAKELONG(TRUE, 0));\r
1603                 CheckMenuItem(GetMenu(GetMainHwnd()), MENU_SYNC, MF_CHECKED);\r
1604         }\r
1605         else\r
1606         {\r
1607                 SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_SYNC, MAKELONG(FALSE, 0));\r
1608                 CheckMenuItem(GetMenu(GetMainHwnd()), MENU_SYNC, MF_UNCHECKED);\r
1609         }\r
1610         return;\r
1611 }\r
1612 \r
1613 \r
1614 /*----- フォルダ同時移動モードを返す ------------------------------------------\r
1615 *\r
1616 *       Parameter\r
1617 *               なし\r
1618 *\r
1619 *       Return Value\r
1620 *               int 半角変換モード\r
1621 *----------------------------------------------------------------------------*/\r
1622 \r
1623 int AskSyncMoveMode(void)\r
1624 {\r
1625         return(SyncMove);\r
1626 }\r
1627 \r
1628 \r
1629 /*===================================================\r
1630 *                       ディレクトリヒストリ\r
1631 *===================================================*/\r
1632 \r
1633 /*----- ホスト側のヒストリ一覧ウインドウに登録 --------------------------------\r
1634 *\r
1635 *       Parameter\r
1636 *               char *Path : パス\r
1637 *\r
1638 *       Return Value\r
1639 *               なし\r
1640 *----------------------------------------------------------------------------*/\r
1641 \r
1642 void SetRemoteDirHist(char *Path)\r
1643 {\r
1644         int i;\r
1645 \r
1646         if((i = SendMessage(hWndDirRemote, CB_FINDSTRINGEXACT, 0, (LPARAM)Path)) != CB_ERR)\r
1647                 SendMessage(hWndDirRemote, CB_DELETESTRING, i, 0);\r
1648 \r
1649         SendMessage(hWndDirRemote, CB_ADDSTRING, 0, (LPARAM)Path);\r
1650         i = SendMessage(hWndDirRemote, CB_GETCOUNT, 0, 0);\r
1651         SendMessage(hWndDirRemote, CB_SETCURSEL, i-1, 0);\r
1652 \r
1653         strcpy(RemoteCurDir, Path);\r
1654         return;\r
1655 }\r
1656 \r
1657 \r
1658 /*----- ローカル側のヒストリ一覧ウインドウに登録 -------------------------------\r
1659 *\r
1660 *       Parameter\r
1661 *               char *Path : パス\r
1662 *\r
1663 *       Return Value\r
1664 *               なし\r
1665 *----------------------------------------------------------------------------*/\r
1666 \r
1667 void SetLocalDirHist(char *Path)\r
1668 {\r
1669         int i;\r
1670 \r
1671         if((i = SendMessage(hWndDirLocal, CB_FINDSTRINGEXACT, 0, (LPARAM)Path)) == CB_ERR)\r
1672                 SendMessage(hWndDirLocal, CB_ADDSTRING, 0, (LPARAM)Path);\r
1673         i = SendMessage(hWndDirLocal, CB_FINDSTRINGEXACT, 0, (LPARAM)Path);\r
1674         SendMessage(hWndDirLocal, CB_SETCURSEL, i, 0);\r
1675 \r
1676         strcpy(LocalCurDir, Path);\r
1677         return;\r
1678 }\r
1679 \r
1680 \r
1681 /*----- ローカルのカレントディレクトリを返す ----------------------------------\r
1682 *\r
1683 *       Parameter\r
1684 *               char *Buf : カレントディレクトリ名を返すバッファ\r
1685 *               int Max : バッファのサイズ\r
1686 *\r
1687 *       Return Value\r
1688 *               なし\r
1689 *----------------------------------------------------------------------------*/\r
1690 \r
1691 void AskLocalCurDir(char *Buf, int Max)\r
1692 {\r
1693         memset(Buf, 0, Max);\r
1694         strncpy(Buf, LocalCurDir, Max-1);\r
1695         return;\r
1696 }\r
1697 \r
1698 \r
1699 /*----- ホストのカレントディレクトリを返す ------------------------------------\r
1700 *\r
1701 *       Parameter\r
1702 *               char *Buf : カレントディレクトリ名を返すバッファ\r
1703 *               int Max : バッファのサイズ\r
1704 *\r
1705 *       Return Value\r
1706 *               なし\r
1707 *----------------------------------------------------------------------------*/\r
1708 \r
1709 void AskRemoteCurDir(char *Buf, int Max)\r
1710 {\r
1711         memset(Buf, 0, Max);\r
1712         strncpy(Buf, RemoteCurDir, Max-1);\r
1713         return;\r
1714 }\r
1715 \r
1716 \r
1717 /*----- カレントディレクトリを設定する ----------------------------------------\r
1718 *\r
1719 *       Parameter\r
1720 *               なし\r
1721 *\r
1722 *       Return Value\r
1723 *               なし\r
1724 *----------------------------------------------------------------------------*/\r
1725 \r
1726 void SetCurrentDirAsDirHist(void)\r
1727 {\r
1728         SetCurrentDirectory(LocalCurDir);\r
1729         return;\r
1730 }\r
1731 \r
1732 \r
1733 /*===================================================\r
1734 *                       メニュー\r
1735 *===================================================*/\r
1736 \r
1737 /*----- ドットファイルを表示するかどうかをメニューに表示する ------------------\r
1738 *\r
1739 *       Parameter\r
1740 *               なし\r
1741 *\r
1742 *       Return Value\r
1743 *               なし\r
1744 *----------------------------------------------------------------------------*/\r
1745 \r
1746 void DispDotFileMode(void)\r
1747 {\r
1748         CheckMenuItem(GetMenu(GetMainHwnd()), MENU_DOTFILE, MF_UNCHECKED);\r
1749         if(DotFile == YES)\r
1750                 CheckMenuItem(GetMenu(GetMainHwnd()), MENU_DOTFILE, MF_CHECKED);\r
1751         return;\r
1752 }\r
1753 \r
1754 \r
1755 /*----- ローカル側の右ボタンメニューを表示 ------------------------------------------------\r
1756 *\r
1757 *       Parameter\r
1758 *               int Pos : メニューの位置\r
1759 *                                       0=マウスカーソルの位置\r
1760 *                                       1=ウインドウの左上\r
1761 *\r
1762 *       Return Value\r
1763 *               なし\r
1764 *----------------------------------------------------------------------------*/\r
1765 \r
1766 void LocalRbuttonMenu(int Pos)\r
1767 {\r
1768         HMENU hMenu;\r
1769         POINT point;\r
1770         RECT Rect;\r
1771         UINT Flg1;\r
1772         UINT Flg2;\r
1773         UINT Flg3;\r
1774         int Count;\r
1775 \r
1776         // デッドロック対策\r
1777 //      if(HideUI == NO)\r
1778         if(HideUI == 0)\r
1779         {\r
1780                 Flg1 = 0;\r
1781                 if(AskConnecting() == NO)\r
1782                         Flg1 = MF_GRAYED;\r
1783 \r
1784                 Count = GetSelectedCount(WIN_LOCAL);\r
1785                 Flg2 = 0;\r
1786                 if(Count == 0)\r
1787                         Flg2 = MF_GRAYED;\r
1788 \r
1789                 Flg3 = 0;\r
1790                 if(Count != 1)\r
1791                         Flg3 = MF_GRAYED;\r
1792 \r
1793                 hMenu = CreatePopupMenu();\r
1794                 AddOpenMenu(hMenu, Flg3);\r
1795                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_UPLOAD, MSGJPN255);\r
1796                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_UPLOAD_AS, MSGJPN256);\r
1797                 AppendMenu(hMenu, MF_STRING | Flg1, MENU_UPLOAD_ALL, MSGJPN257);\r
1798                 AppendMenu(hMenu, MF_STRING | Flg2, MENU_DELETE, MSGJPN258);\r
1799                 AppendMenu(hMenu, MF_STRING | Flg2, MENU_RENAME, MSGJPN259);\r
1800                 AppendMenu(hMenu, MF_STRING , MENU_MKDIR, MSGJPN260);\r
1801                 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1802                 AppendMenu(hMenu, MF_STRING , MENU_FILESIZE, MSGJPN261);\r
1803                 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1804                 AppendMenu(hMenu, MF_STRING, REFRESH_LOCAL, MSGJPN262);\r
1805 \r
1806                 if(Pos == 0)\r
1807                         GetCursorPos(&point);\r
1808                 else\r
1809                 {\r
1810                         GetWindowRect(GetLocalHwnd(), &Rect);\r
1811                         point.x = Rect.left + 20;\r
1812                         point.y = Rect.top + 20;\r
1813                 }\r
1814                 TrackPopupMenu(hMenu, TPM_LEFTBUTTON | TPM_RIGHTBUTTON, point.x, point.y, 0, GetMainHwnd(), NULL);\r
1815 \r
1816                 DestroyMenu(hMenu);\r
1817         }\r
1818         return;\r
1819 }\r
1820 \r
1821 \r
1822 /*----- ホスト側の右ボタンメニューを表示 --------------------------------------\r
1823 *\r
1824 *       Parameter\r
1825 *               int Pos : メニューの位置\r
1826 *                                       0=マウスカーソルの位置\r
1827 *                                       1=ウインドウの左上\r
1828 *\r
1829 *       Return Value\r
1830 *               なし\r
1831 *----------------------------------------------------------------------------*/\r
1832 \r
1833 void RemoteRbuttonMenu(int Pos)\r
1834 {\r
1835         HMENU hMenu;\r
1836         POINT point;\r
1837         RECT Rect;\r
1838         UINT Flg1;\r
1839         UINT Flg2;\r
1840         UINT Flg3;\r
1841         int Count;\r
1842 \r
1843         // デッドロック対策\r
1844 //      if(HideUI == NO)\r
1845         if(HideUI == 0)\r
1846         {\r
1847                 Flg1 = 0;\r
1848                 if(AskConnecting() == NO)\r
1849                         Flg1 = MF_GRAYED;\r
1850 \r
1851                 Count = GetSelectedCount(WIN_REMOTE);\r
1852                 Flg2 = 0;\r
1853                 if(Count == 0)\r
1854                         Flg2 = MF_GRAYED;\r
1855 \r
1856                 Flg3 = 0;\r
1857                 if(Count != 1)\r
1858                         Flg3 = MF_GRAYED;\r
1859 \r
1860                 hMenu = CreatePopupMenu();\r
1861                 AddOpenMenu(hMenu, Flg1 | Flg3);\r
1862                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DOWNLOAD, MSGJPN263);\r
1863                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DOWNLOAD_AS, MSGJPN264);\r
1864                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DOWNLOAD_AS_FILE, MSGJPN265);\r
1865                 AppendMenu(hMenu, MF_STRING | Flg1, MENU_DOWNLOAD_ALL, MSGJPN266);\r
1866                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DELETE, MSGJPN267);\r
1867                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_RENAME, MSGJPN268);\r
1868 #if defined(HAVE_TANDEM)\r
1869                 /* HP NonStop Server では CHMOD の仕様が異なるため使用不可 */\r
1870                 if (AskRealHostType() != HTYPE_TANDEM)\r
1871 #endif\r
1872                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_CHMOD, MSGJPN269);\r
1873                 AppendMenu(hMenu, MF_STRING | Flg1, MENU_MKDIR, MSGJPN270);\r
1874                 AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_URL_COPY, MSGJPN271);\r
1875 #if defined(HAVE_TANDEM)\r
1876                 /* OSS モードのときに表示されるように AskRealHostType() を使用する */\r
1877                 if (AskRealHostType() == HTYPE_TANDEM)\r
1878                         AppendMenu(hMenu, MF_STRING | Flg1, MENU_SWITCH_OSS, MSGJPN2001);\r
1879 #endif\r
1880                 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1881                 AppendMenu(hMenu, MF_STRING | Flg1, MENU_FILESIZE, MSGJPN272);\r
1882                 AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1883                 AppendMenu(hMenu, MF_STRING | Flg1, REFRESH_REMOTE, MSGJPN273);\r
1884 \r
1885                 if(Pos == 0)\r
1886                         GetCursorPos(&point);\r
1887                 else\r
1888                 {\r
1889                         GetWindowRect(GetRemoteHwnd(), &Rect);\r
1890                         point.x = Rect.left + 20;\r
1891                         point.y = Rect.top + 20;\r
1892                 }\r
1893                 if(TrackPopupMenu(hMenu, TPM_LEFTBUTTON | TPM_RIGHTBUTTON, point.x, point.y, 0, GetMainHwnd(), NULL) == 0)\r
1894                         Count = GetLastError();\r
1895 \r
1896                 DestroyMenu(hMenu);\r
1897         }\r
1898         return;\r
1899 }\r
1900 \r
1901 \r
1902 /*----- 右ボタンメニューに「開く」を追加  -------------------------------------\r
1903 *\r
1904 *       Parameter\r
1905 *               HMENU hMenu : メニューハンドル\r
1906 *               UINT Flg : フラグ\r
1907 *\r
1908 *       Return Value\r
1909 *               なし\r
1910 *----------------------------------------------------------------------------*/\r
1911 \r
1912 static void AddOpenMenu(HMENU hMenu, UINT Flg)\r
1913 {\r
1914         static const UINT MenuID[VIEWERS] = { MENU_OPEN1, MENU_OPEN2, MENU_OPEN3 };\r
1915         char Tmp[FMAX_PATH+1];\r
1916         int i;\r
1917 \r
1918         // ローカルフォルダを開く\r
1919 //      AppendMenu(hMenu, MF_STRING | Flg, MENU_DCLICK, MSGJPN274);\r
1920         AppendMenu(hMenu, MF_STRING | Flg, MENU_OPEN, MSGJPN274);\r
1921         for(i = 0; i < VIEWERS; i++)\r
1922         {\r
1923                 if(strlen(ViewerName[i]) != 0)\r
1924                 {\r
1925                         sprintf(Tmp, MSGJPN275, GetToolName(ViewerName[i]), i+1);\r
1926                         AppendMenu(hMenu, MF_STRING | Flg, MenuID[i], Tmp);\r
1927                 }\r
1928         }\r
1929         AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
1930         return;\r
1931 }\r
1932 \r
1933 /* 2007/09/21 sunasunamix  ここから *********************/\r
1934 \r
1935 /*----- CreateToolbarEx のマウスクリック関連を無視する(TbarMain用) -----------\r
1936 *       (サブクラス化を行うためのウインドウプロシージャ)\r
1937 *----------------------------------------------------------------------------*/\r
1938 static LRESULT CALLBACK CountermeasureTbarMainProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam)\r
1939 {\r
1940         switch (uMessage) {\r
1941         case WM_DESTROY :\r
1942                 // 64ビット対応\r
1943 //              SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)pOldTbarMainProc);\r
1944                 SetWindowLongPtr(hWnd,GWLP_WNDPROC,(LONG_PTR)pOldTbarMainProc);\r
1945                 break;\r
1946         case WM_RBUTTONDBLCLK :\r
1947         case WM_RBUTTONDOWN :\r
1948         case WM_RBUTTONUP :\r
1949                 return TRUE;\r
1950         }\r
1951         return CallWindowProc(pOldTbarMainProc, hWnd, uMessage, wParam, lParam);\r
1952 }\r
1953 \r
1954 /*----- CreateToolbarEx のマウスクリック関連を無視する(TbarLocal用) ----------\r
1955 *       (サブクラス化を行うためのウインドウプロシージャ)\r
1956 *----------------------------------------------------------------------------*/\r
1957 static LRESULT CALLBACK CountermeasureTbarLocalProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam)\r
1958 {\r
1959         switch (uMessage) {\r
1960         case WM_DESTROY :\r
1961                 // 64ビット対応\r
1962 //              SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)pOldTbarLocalProc);\r
1963                 SetWindowLongPtr(hWnd,GWLP_WNDPROC,(LONG_PTR)pOldTbarLocalProc);\r
1964                 break;\r
1965         case WM_RBUTTONDBLCLK :\r
1966         case WM_RBUTTONDOWN :\r
1967         case WM_RBUTTONUP :\r
1968                 return TRUE;\r
1969         }\r
1970         return CallWindowProc(pOldTbarLocalProc, hWnd, uMessage, wParam, lParam);\r
1971 }\r
1972 \r
1973 /*----- CreateToolbarEx のマウスクリック関連を無視する(TbarRemote用) ---------\r
1974 *       (サブクラス化を行うためのウインドウプロシージャ)\r
1975 *----------------------------------------------------------------------------*/\r
1976 static LRESULT CALLBACK CountermeasureTbarRemoteProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam)\r
1977 {\r
1978         switch (uMessage) {\r
1979         case WM_DESTROY :\r
1980                 // 64ビット対応\r
1981 //              SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)pOldTbarRemoteProc);\r
1982                 SetWindowLongPtr(hWnd,GWLP_WNDPROC,(LONG_PTR)pOldTbarRemoteProc);\r
1983                 break;\r
1984         case WM_RBUTTONDBLCLK :\r
1985         case WM_RBUTTONDOWN :\r
1986         case WM_RBUTTONUP :\r
1987                 return TRUE;\r
1988         }\r
1989         return CallWindowProc(pOldTbarRemoteProc, hWnd, uMessage, wParam, lParam);\r
1990 }\r
1991 /********************************************* ここまで */\r