OSDN Git Service

Update PEM file.
[ffftp/ffftp.git] / option.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 <commctrl.h>\r
38 #include <windowsx.h>\r
39 \r
40 #include "common.h"\r
41 #include "resource.h"\r
42 \r
43 #include <htmlhelp.h>\r
44 #include "helpid.h"\r
45 \r
46 // UTF-8対応\r
47 #undef __MBSWRAPPER_H__\r
48 #include "mbswrapper.h"\r
49 \r
50 \r
51 /*===== プロトタイプ =====*/\r
52 \r
53 // 64ビット対応\r
54 //static BOOL CALLBACK UserSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
55 //static BOOL CALLBACK Trmode1SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
56 //static BOOL CALLBACK Trmode2SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
57 //static BOOL CALLBACK Trmode3SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
58 //static BOOL CALLBACK DefAttrDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
59 static INT_PTR CALLBACK UserSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
60 static INT_PTR CALLBACK Trmode1SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
61 static INT_PTR CALLBACK Trmode2SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
62 static INT_PTR CALLBACK Trmode3SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
63 // UTF-8対応\r
64 static INT_PTR CALLBACK Trmode4SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
65 static INT_PTR CALLBACK DefAttrDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
66 static void AddFnameAttrToListView(HWND hDlg, char *Fname, char *Attr);\r
67 static void GetFnameAttrFromListView(HWND hDlg, char *Buf);\r
68 // 64ビット対応\r
69 // ファイルの属性を数字で表示\r
70 //static BOOL CALLBACK MirrorSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
71 //static BOOL CALLBACK NotifySettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
72 //static BOOL CALLBACK DispSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
73 static INT_PTR CALLBACK MirrorSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
74 static INT_PTR CALLBACK NotifySettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
75 static INT_PTR CALLBACK Disp1SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
76 static INT_PTR CALLBACK Disp2SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
77 static int SelectListFont(HWND hWnd, LOGFONT *lFont);\r
78 // 64ビット対応\r
79 //static BOOL CALLBACK ConnectSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
80 //static BOOL CALLBACK FireSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
81 //static BOOL CALLBACK ToolSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
82 //static BOOL CALLBACK SoundSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
83 //static BOOL CALLBACK MiscSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
84 //static BOOL CALLBACK SortSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
85 static INT_PTR CALLBACK ConnectSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
86 static INT_PTR CALLBACK FireSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
87 static INT_PTR CALLBACK ToolSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
88 static INT_PTR CALLBACK SoundSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
89 static INT_PTR CALLBACK MiscSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
90 static INT_PTR CALLBACK SortSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
91 // hostman.cで使用\r
92 //static int GetDecimalText(HWND hDlg, int Ctrl);\r
93 //static void SetDecimalText(HWND hDlg, int Ctrl, int Num);\r
94 //static void CheckRange2(int *Cur, int Max, int Min);\r
95 //static void AddTextToListBox(HWND hDlg, char *Str, int CtrlList, int BufSize);\r
96 //static void SetMultiTextToList(HWND hDlg, int CtrlList, char *Text);\r
97 //static void GetMultiTextFromList(HWND hDlg, int CtrlList, char *Buf, int BufSize);\r
98 int GetDecimalText(HWND hDlg, int Ctrl);\r
99 void SetDecimalText(HWND hDlg, int Ctrl, int Num);\r
100 void CheckRange2(int *Cur, int Max, int Min);\r
101 void AddTextToListBox(HWND hDlg, char *Str, int CtrlList, int BufSize);\r
102 void SetMultiTextToList(HWND hDlg, int CtrlList, char *Text);\r
103 void GetMultiTextFromList(HWND hDlg, int CtrlList, char *Buf, int BufSize);\r
104 \r
105 \r
106 \r
107 typedef struct {\r
108         char Fname[FMAX_PATH+1];\r
109         char Attr[5];\r
110 } ATTRSET;\r
111 \r
112 \r
113 \r
114 \r
115 \r
116 /*===== 外部参照 =====*/\r
117 \r
118 extern HWND hHelpWin;\r
119 \r
120 /* 設定値 */\r
121 extern char UserMailAdrs[USER_MAIL_LEN+1];\r
122 extern char ViewerName[VIEWERS][FMAX_PATH+1];\r
123 extern int ConnectOnStart;\r
124 extern int DebugConsole;\r
125 extern int SaveWinPos;\r
126 extern char AsciiExt[ASCII_EXT_LEN+1];\r
127 extern int RecvMode;\r
128 extern int SendMode;\r
129 extern int MoveMode;\r
130 extern int CacheEntry;\r
131 extern int CacheSave;\r
132 extern char FwallHost[HOST_ADRS_LEN+1];\r
133 extern char FwallUser[USER_NAME_LEN+1];\r
134 extern char FwallPass[PASSWORD_LEN+1];\r
135 extern int FwallPort;\r
136 extern int FwallType;\r
137 extern int FwallDefault;\r
138 extern int FwallSecurity;\r
139 extern int FwallResolve;\r
140 extern int FwallLower;\r
141 extern int FwallDelimiter;\r
142 extern int PasvDefault;\r
143 extern char DefaultLocalPath[FMAX_PATH+1];\r
144 extern int SaveTimeStamp;\r
145 extern int DclickOpen;\r
146 extern SOUNDFILE Sound[SOUND_TYPES];\r
147 extern int FnameCnv;\r
148 extern int ConnectAndSet;\r
149 extern int TimeOut;\r
150 extern int RmEOF;\r
151 extern int RegType;\r
152 extern char MirrorNoTrn[MIRROR_LEN+1];\r
153 extern char MirrorNoDel[MIRROR_LEN+1];\r
154 extern int MirrorFnameCnv;\r
155 extern int RasClose;\r
156 extern int RasCloseNotify;\r
157 extern int FileHist;\r
158 extern char DefAttrList[DEFATTRLIST_LEN+1];\r
159 extern char TmpPath[FMAX_PATH+1];\r
160 extern int QuickAnonymous;\r
161 extern int PassToHist;\r
162 extern int VaxSemicolon;\r
163 extern int SendQuit;\r
164 extern int NoRasControl;\r
165 extern int DispIgnoreHide;\r
166 extern int DispDrives;\r
167 extern HFONT ListFont;\r
168 extern LOGFONT ListLogFont;\r
169 extern int MirUpDelNotify;\r
170 extern int MirDownDelNotify;\r
171 extern int FolderAttr;\r
172 extern int FolderAttrNum;\r
173 // ファイルアイコン表示対応\r
174 extern int DispFileIcon;\r
175 // タイムスタンプのバグ修正\r
176 extern int DispTimeSeconds;\r
177 // ファイルの属性を数字で表示\r
178 extern int DispPermissionsNumber;\r
179 // ディレクトリ自動作成\r
180 extern int MakeAllDir;\r
181 // UPnP対応\r
182 extern int UPnPEnabled;\r
183 // 全設定暗号化対応\r
184 extern int EncryptAllSettings;\r
185 // ローカル側自動更新\r
186 extern int AutoRefreshFileList;\r
187 // 古い処理内容を消去\r
188 extern int RemoveOldLog;\r
189 \r
190 \r
191 /*----- オプションのプロパティシート ------------------------------------------\r
192 *\r
193 *       Parameter\r
194 *               なし\r
195 *\r
196 *       Return Value\r
197 *               なし\r
198 *----------------------------------------------------------------------------*/\r
199 \r
200 void SetOption(int Start)\r
201 {\r
202         // UTF-8対応\r
203 //      PROPSHEETPAGE psp[12];\r
204         PROPSHEETPAGE psp[14];\r
205         PROPSHEETHEADER psh;\r
206 \r
207         // 変数が未初期化のバグ修正\r
208         memset(&psp, 0, sizeof(psp));\r
209         memset(&psh, 0, sizeof(psh));\r
210 \r
211         psp[0].dwSize = sizeof(PROPSHEETPAGE);\r
212         psp[0].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
213         psp[0].hInstance = GetFtpInst();\r
214         psp[0].pszTemplate = MAKEINTRESOURCE(opt_user_dlg);\r
215         psp[0].pszIcon = NULL;\r
216         psp[0].pfnDlgProc = UserSettingProc;\r
217         psp[0].pszTitle = MSGJPN186;\r
218         psp[0].lParam = 0;\r
219         psp[0].pfnCallback = NULL;\r
220 \r
221         psp[1].dwSize = sizeof(PROPSHEETPAGE);\r
222         psp[1].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
223         psp[1].hInstance = GetFtpInst();\r
224         psp[1].pszTemplate = MAKEINTRESOURCE(opt_trmode1_dlg);\r
225         psp[1].pszIcon = NULL;\r
226         psp[1].pfnDlgProc = Trmode1SettingProc;\r
227         psp[1].pszTitle = MSGJPN187;\r
228         psp[1].lParam = 0;\r
229         psp[1].pfnCallback = NULL;\r
230 \r
231         psp[2].dwSize = sizeof(PROPSHEETPAGE);\r
232         psp[2].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
233         psp[2].hInstance = GetFtpInst();\r
234         psp[2].pszTemplate = MAKEINTRESOURCE(opt_trmode2_dlg);\r
235         psp[2].pszIcon = NULL;\r
236         psp[2].pfnDlgProc = Trmode2SettingProc;\r
237         psp[2].pszTitle = MSGJPN188;\r
238         psp[2].lParam = 0;\r
239         psp[2].pfnCallback = NULL;\r
240 \r
241         psp[3].dwSize = sizeof(PROPSHEETPAGE);\r
242         psp[3].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
243         psp[3].hInstance = GetFtpInst();\r
244         psp[3].pszTemplate = MAKEINTRESOURCE(opt_trmode3_dlg);\r
245         psp[3].pszIcon = NULL;\r
246         psp[3].pfnDlgProc = Trmode3SettingProc;\r
247         psp[3].pszTitle = MSGJPN189;\r
248         psp[3].lParam = 0;\r
249         psp[3].pfnCallback = NULL;\r
250 \r
251         // UTF-8対応\r
252 //      psp[4].dwSize = sizeof(PROPSHEETPAGE);\r
253 //      psp[4].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
254 //      psp[4].hInstance = GetFtpInst();\r
255 //      psp[4].pszTemplate = MAKEINTRESOURCE(opt_mirror_dlg);\r
256 //      psp[4].pszIcon = NULL;\r
257 //      psp[4].pfnDlgProc = MirrorSettingProc;\r
258 //      psp[4].pszTitle = MSGJPN190;\r
259 //      psp[4].lParam = 0;\r
260 //      psp[4].pfnCallback = NULL;\r
261 \r
262 //      psp[5].dwSize = sizeof(PROPSHEETPAGE);\r
263 //      psp[5].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
264 //      psp[5].hInstance = GetFtpInst();\r
265 //      psp[5].pszTemplate = MAKEINTRESOURCE(opt_notify_dlg);\r
266 //      psp[5].pszIcon = NULL;\r
267 //      psp[5].pfnDlgProc = NotifySettingProc;\r
268 //      psp[5].pszTitle = MSGJPN191;\r
269 //      psp[5].lParam = 0;\r
270 //      psp[5].pfnCallback = NULL;\r
271 \r
272 //      psp[6].dwSize = sizeof(PROPSHEETPAGE);\r
273 //      psp[6].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
274 //      psp[6].hInstance = GetFtpInst();\r
275 //      psp[6].pszTemplate = MAKEINTRESOURCE(opt_disp_dlg);\r
276 //      psp[6].pszIcon = NULL;\r
277 //      psp[6].pfnDlgProc = DispSettingProc;\r
278 //      psp[6].pszTitle = MSGJPN192;\r
279 //      psp[6].lParam = 0;\r
280 //      psp[6].pfnCallback = NULL;\r
281 \r
282 //      psp[7].dwSize = sizeof(PROPSHEETPAGE);\r
283 //      psp[7].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
284 //      psp[7].hInstance = GetFtpInst();\r
285 //      psp[7].pszTemplate = MAKEINTRESOURCE(opt_connect_dlg);\r
286 //      psp[7].pszIcon = NULL;\r
287 //      psp[7].pfnDlgProc = ConnectSettingProc;\r
288 //      psp[7].pszTitle = MSGJPN193;\r
289 //      psp[7].lParam = 0;\r
290 //      psp[7].pfnCallback = NULL;\r
291 \r
292 //      psp[8].dwSize = sizeof(PROPSHEETPAGE);\r
293 //      psp[8].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
294 //      psp[8].hInstance = GetFtpInst();\r
295 //      psp[8].pszTemplate = MAKEINTRESOURCE(opt_fire_dlg);\r
296 //      psp[8].pszIcon = NULL;\r
297 //      psp[8].pfnDlgProc = FireSettingProc;\r
298 //      psp[8].pszTitle = MSGJPN194;\r
299 //      psp[8].lParam = 0;\r
300 //      psp[8].pfnCallback = NULL;\r
301 \r
302 //      psp[9].dwSize = sizeof(PROPSHEETPAGE);\r
303 //      psp[9].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
304 //      psp[9].hInstance = GetFtpInst();\r
305 //      psp[9].pszTemplate = MAKEINTRESOURCE(opt_tool_dlg);\r
306 //      psp[9].pszIcon = NULL;\r
307 //      psp[9].pfnDlgProc = ToolSettingProc;\r
308 //      psp[9].pszTitle = MSGJPN195;\r
309 //      psp[9].lParam = 0;\r
310 //      psp[9].pfnCallback = NULL;\r
311 \r
312 //      psp[10].dwSize = sizeof(PROPSHEETPAGE);\r
313 //      psp[10].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
314 //      psp[10].hInstance = GetFtpInst();\r
315 //      psp[10].pszTemplate = MAKEINTRESOURCE(opt_sound_dlg);\r
316 //      psp[10].pszIcon = NULL;\r
317 //      psp[10].pfnDlgProc = SoundSettingProc;\r
318 //      psp[10].pszTitle = MSGJPN196;\r
319 //      psp[10].lParam = 0;\r
320 //      psp[10].pfnCallback = NULL;\r
321 \r
322 //      psp[11].dwSize = sizeof(PROPSHEETPAGE);\r
323 //      psp[11].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
324 //      psp[11].hInstance = GetFtpInst();\r
325 //      psp[11].pszTemplate = MAKEINTRESOURCE(opt_misc_dlg);\r
326 //      psp[11].pszIcon = NULL;\r
327 //      psp[11].pfnDlgProc = MiscSettingProc;\r
328 //      psp[11].pszTitle = MSGJPN197;\r
329 //      psp[11].lParam = 0;\r
330 //      psp[11].pfnCallback = NULL;\r
331 \r
332         psp[4].dwSize = sizeof(PROPSHEETPAGE);\r
333         psp[4].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
334         psp[4].hInstance = GetFtpInst();\r
335         psp[4].pszTemplate = MAKEINTRESOURCE(opt_trmode4_dlg);\r
336         psp[4].pszIcon = NULL;\r
337         psp[4].pfnDlgProc = Trmode4SettingProc;\r
338         psp[4].pszTitle = MSGJPN339;\r
339         psp[4].lParam = 0;\r
340         psp[4].pfnCallback = NULL;\r
341 \r
342         psp[5].dwSize = sizeof(PROPSHEETPAGE);\r
343         psp[5].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
344         psp[5].hInstance = GetFtpInst();\r
345         psp[5].pszTemplate = MAKEINTRESOURCE(opt_mirror_dlg);\r
346         psp[5].pszIcon = NULL;\r
347         psp[5].pfnDlgProc = MirrorSettingProc;\r
348         psp[5].pszTitle = MSGJPN190;\r
349         psp[5].lParam = 0;\r
350         psp[5].pfnCallback = NULL;\r
351 \r
352         psp[6].dwSize = sizeof(PROPSHEETPAGE);\r
353         psp[6].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
354         psp[6].hInstance = GetFtpInst();\r
355         psp[6].pszTemplate = MAKEINTRESOURCE(opt_notify_dlg);\r
356         psp[6].pszIcon = NULL;\r
357         psp[6].pfnDlgProc = NotifySettingProc;\r
358         psp[6].pszTitle = MSGJPN191;\r
359         psp[6].lParam = 0;\r
360         psp[6].pfnCallback = NULL;\r
361 \r
362         psp[7].dwSize = sizeof(PROPSHEETPAGE);\r
363         psp[7].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
364         psp[7].hInstance = GetFtpInst();\r
365         psp[7].pszTemplate = MAKEINTRESOURCE(opt_disp1_dlg);\r
366         psp[7].pszIcon = NULL;\r
367         psp[7].pfnDlgProc = Disp1SettingProc;\r
368         psp[7].pszTitle = MSGJPN192;\r
369         psp[7].lParam = 0;\r
370         psp[7].pfnCallback = NULL;\r
371 \r
372         psp[8].dwSize = sizeof(PROPSHEETPAGE);\r
373         psp[8].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
374         psp[8].hInstance = GetFtpInst();\r
375         psp[8].pszTemplate = MAKEINTRESOURCE(opt_disp2_dlg);\r
376         psp[8].pszIcon = NULL;\r
377         psp[8].pfnDlgProc = Disp2SettingProc;\r
378         psp[8].pszTitle = MSGJPN340;\r
379         psp[8].lParam = 0;\r
380         psp[8].pfnCallback = NULL;\r
381 \r
382         psp[9].dwSize = sizeof(PROPSHEETPAGE);\r
383         psp[9].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
384         psp[9].hInstance = GetFtpInst();\r
385         psp[9].pszTemplate = MAKEINTRESOURCE(opt_connect_dlg);\r
386         psp[9].pszIcon = NULL;\r
387         psp[9].pfnDlgProc = ConnectSettingProc;\r
388         psp[9].pszTitle = MSGJPN193;\r
389         psp[9].lParam = 0;\r
390         psp[9].pfnCallback = NULL;\r
391 \r
392         psp[10].dwSize = sizeof(PROPSHEETPAGE);\r
393         psp[10].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
394         psp[10].hInstance = GetFtpInst();\r
395         psp[10].pszTemplate = MAKEINTRESOURCE(opt_fire_dlg);\r
396         psp[10].pszIcon = NULL;\r
397         psp[10].pfnDlgProc = FireSettingProc;\r
398         psp[10].pszTitle = MSGJPN194;\r
399         psp[10].lParam = 0;\r
400         psp[10].pfnCallback = NULL;\r
401 \r
402         psp[11].dwSize = sizeof(PROPSHEETPAGE);\r
403         psp[11].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
404         psp[11].hInstance = GetFtpInst();\r
405         psp[11].pszTemplate = MAKEINTRESOURCE(opt_tool_dlg);\r
406         psp[11].pszIcon = NULL;\r
407         psp[11].pfnDlgProc = ToolSettingProc;\r
408         psp[11].pszTitle = MSGJPN195;\r
409         psp[11].lParam = 0;\r
410         psp[11].pfnCallback = NULL;\r
411 \r
412         psp[12].dwSize = sizeof(PROPSHEETPAGE);\r
413         psp[12].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
414         psp[12].hInstance = GetFtpInst();\r
415         psp[12].pszTemplate = MAKEINTRESOURCE(opt_sound_dlg);\r
416         psp[12].pszIcon = NULL;\r
417         psp[12].pfnDlgProc = SoundSettingProc;\r
418         psp[12].pszTitle = MSGJPN196;\r
419         psp[12].lParam = 0;\r
420         psp[12].pfnCallback = NULL;\r
421 \r
422         psp[13].dwSize = sizeof(PROPSHEETPAGE);\r
423         psp[13].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
424         psp[13].hInstance = GetFtpInst();\r
425         psp[13].pszTemplate = MAKEINTRESOURCE(opt_misc_dlg);\r
426         psp[13].pszIcon = NULL;\r
427         psp[13].pfnDlgProc = MiscSettingProc;\r
428         psp[13].pszTitle = MSGJPN197;\r
429         psp[13].lParam = 0;\r
430         psp[13].pfnCallback = NULL;\r
431 \r
432         psh.dwSize = sizeof(PROPSHEETHEADER);\r
433         psh.dwFlags = PSH_HASHELP | PSH_NOAPPLYNOW | PSH_PROPSHEETPAGE;\r
434         psh.hwndParent = GetMainHwnd();\r
435         psh.hInstance = GetFtpInst();\r
436         psh.pszIcon = NULL;\r
437         psh.pszCaption = MSGJPN198;\r
438         psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);\r
439         psh.nStartPage = Start;\r
440         psh.ppsp = (LPCPROPSHEETPAGE)&psp;\r
441         psh.pfnCallback = NULL;\r
442 \r
443         PropertySheet(&psh);\r
444         return;\r
445 }\r
446 \r
447 \r
448 /*----- ユーザ設定ウインドウのコールバック ------------------------------------\r
449 *\r
450 *       Parameter\r
451 *               HWND hDlg : ウインドウハンドル\r
452 *               UINT message : メッセージ番号\r
453 *               WPARAM wParam : メッセージの WPARAM 引数\r
454 *               LPARAM lParam : メッセージの LPARAM 引数\r
455 *\r
456 *       Return Value\r
457 *               BOOL TRUE/FALSE\r
458 *----------------------------------------------------------------------------*/\r
459 \r
460 // 64ビット対応\r
461 //static BOOL CALLBACK UserSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
462 static INT_PTR CALLBACK UserSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
463 {\r
464         NMHDR *pnmhdr;\r
465 \r
466         switch (message)\r
467         {\r
468                 case WM_INITDIALOG :\r
469                         SendDlgItemMessage(hDlg, USER_ADRS, EM_LIMITTEXT, PASSWORD_LEN, 0);\r
470                         SendDlgItemMessage(hDlg, USER_ADRS, WM_SETTEXT, 0, (LPARAM)UserMailAdrs);\r
471                     return(TRUE);\r
472 \r
473                 case WM_NOTIFY:\r
474                         pnmhdr = (NMHDR FAR *)lParam;\r
475                         switch(pnmhdr->code)\r
476                         {\r
477                                 case PSN_APPLY :\r
478                                         SendDlgItemMessage(hDlg, USER_ADRS, WM_GETTEXT, USER_MAIL_LEN+1, (LPARAM)UserMailAdrs);\r
479                                         break;\r
480 \r
481                                 case PSN_RESET :\r
482                                         break;\r
483 \r
484                                 case PSN_HELP :\r
485                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000041);\r
486                                         break;\r
487                         }\r
488                         break;\r
489         }\r
490     return(FALSE);\r
491 }\r
492 \r
493 \r
494 /*----- 転送設定1ウインドウのコールバック ------------------------------------\r
495 *\r
496 *       Parameter\r
497 *               HWND hDlg : ウインドウハンドル\r
498 *               UINT message : メッセージ番号\r
499 *               WPARAM wParam : メッセージの WPARAM 引数\r
500 *               LPARAM lParam : メッセージの LPARAM 引数\r
501 *\r
502 *       Return Value\r
503 *               BOOL TRUE/FALSE\r
504 *----------------------------------------------------------------------------*/\r
505 \r
506 // 64ビット対応\r
507 //static BOOL CALLBACK Trmode1SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
508 static INT_PTR CALLBACK Trmode1SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
509 {\r
510         NMHDR *pnmhdr;\r
511         int Num;\r
512         char Tmp[FMAX_PATH+1];\r
513         int Trash;\r
514 \r
515         static const RADIOBUTTON ModeButton[] = {\r
516                 { TRMODE_AUTO, TYPE_X },\r
517                 { TRMODE_ASCII, TYPE_A },\r
518                 { TRMODE_BIN, TYPE_I }\r
519         };\r
520         #define MODEBUTTONS     (sizeof(ModeButton)/sizeof(RADIOBUTTON))\r
521 \r
522         switch (message)\r
523         {\r
524                 case WM_INITDIALOG :\r
525                         SetMultiTextToList(hDlg, TRMODE_EXT_LIST, AsciiExt);\r
526                         SetRadioButtonByValue(hDlg, AskTransferType(), ModeButton, MODEBUTTONS);\r
527                         SendDlgItemMessage(hDlg, TRMODE_TIME, BM_SETCHECK, SaveTimeStamp, 0);\r
528                         SendDlgItemMessage(hDlg, TRMODE_EOF, BM_SETCHECK, RmEOF, 0);\r
529                         SendDlgItemMessage(hDlg, TRMODE_SEMICOLON, BM_SETCHECK, VaxSemicolon, 0);\r
530                         // ディレクトリ自動作成\r
531                         SendDlgItemMessage(hDlg, TRMODE_MAKEDIR, BM_SETCHECK, MakeAllDir, 0);\r
532 \r
533                         SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(TRMODE_EXT_LIST, 0), 0);\r
534 \r
535                     return(TRUE);\r
536 \r
537                 case WM_NOTIFY:\r
538                         pnmhdr = (NMHDR FAR *)lParam;\r
539                         switch(pnmhdr->code)\r
540                         {\r
541                                 case PSN_APPLY :\r
542                                         SetTransferTypeImm(AskRadioButtonValue(hDlg, ModeButton, MODEBUTTONS));\r
543                                         SaveTransferType();\r
544                                         GetMultiTextFromList(hDlg, TRMODE_EXT_LIST, AsciiExt, ASCII_EXT_LEN+1);\r
545                                         SaveTimeStamp = SendDlgItemMessage(hDlg, TRMODE_TIME, BM_GETCHECK, 0, 0);\r
546                                         RmEOF = SendDlgItemMessage(hDlg, TRMODE_EOF, BM_GETCHECK, 0, 0);\r
547                                         VaxSemicolon = SendDlgItemMessage(hDlg, TRMODE_SEMICOLON, BM_GETCHECK, 0, 0);\r
548                                         // ディレクトリ自動作成\r
549                                         MakeAllDir = SendDlgItemMessage(hDlg, TRMODE_MAKEDIR, BM_GETCHECK, 0, 0);\r
550                                         break;\r
551 \r
552                                 case PSN_RESET :\r
553                                         break;\r
554 \r
555                                 case PSN_HELP :\r
556                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000042);\r
557                                         break;\r
558                         }\r
559                         break;\r
560 \r
561                 case WM_COMMAND :\r
562                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
563                         {\r
564                                 case TRMODE_ASCII :\r
565                                 case TRMODE_BIN :\r
566                                         EnableWindow(GetDlgItem(hDlg, TRMODE_EXT_LIST), FALSE);\r
567                                         EnableWindow(GetDlgItem(hDlg, TRMODE_ADD), FALSE);\r
568                                         EnableWindow(GetDlgItem(hDlg, TRMODE_DEL), FALSE);\r
569                                         break;\r
570 \r
571                                 case TRMODE_AUTO :\r
572                                         EnableWindow(GetDlgItem(hDlg, TRMODE_EXT_LIST), TRUE);\r
573                                         EnableWindow(GetDlgItem(hDlg, TRMODE_ADD), TRUE);\r
574                                         EnableWindow(GetDlgItem(hDlg, TRMODE_DEL), TRUE);\r
575                                         break;\r
576 \r
577                                 case TRMODE_ADD :\r
578                                         strcpy(Tmp, "");\r
579                                         if(InputDialogBox(fname_in_dlg, hDlg, MSGJPN199, Tmp, FMAX_PATH, &Trash, IDH_HELP_TOPIC_0000001) == YES)\r
580                                                 AddTextToListBox(hDlg, Tmp,  TRMODE_EXT_LIST, ASCII_EXT_LEN+1);\r
581                                         break;\r
582 \r
583                                 case TRMODE_DEL :\r
584                                         if((Num = SendDlgItemMessage(hDlg, TRMODE_EXT_LIST, LB_GETCURSEL, 0, 0)) != LB_ERR)\r
585                                                 SendDlgItemMessage(hDlg, TRMODE_EXT_LIST, LB_DELETESTRING, Num, 0);\r
586                                         break;\r
587                         }\r
588                         return(TRUE);\r
589         }\r
590     return(FALSE);\r
591 }\r
592 \r
593 \r
594 /*----- 転送設定2ウインドウのコールバック ------------------------------------\r
595 *\r
596 *       Parameter\r
597 *               HWND hDlg : ウインドウハンドル\r
598 *               UINT message : メッセージ番号\r
599 *               WPARAM wParam : メッセージの WPARAM 引数\r
600 *               LPARAM lParam : メッセージの LPARAM 引数\r
601 *\r
602 *       Return Value\r
603 *               BOOL TRUE/FALSE\r
604 *----------------------------------------------------------------------------*/\r
605 \r
606 // 64ビット対応\r
607 //static BOOL CALLBACK Trmode2SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
608 static INT_PTR CALLBACK Trmode2SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
609 {\r
610         NMHDR *pnmhdr;\r
611         char Tmp[FMAX_PATH+1];\r
612 \r
613         static const RADIOBUTTON CnvButton[] = {\r
614                 { TRMODE2_NOCNV, FNAME_NOCNV },\r
615                 { TRMODE2_LOWER, FNAME_LOWER },\r
616                 { TRMODE2_UPPER, FNAME_UPPER }\r
617         };\r
618         #define CNVBUTTONS      (sizeof(CnvButton)/sizeof(RADIOBUTTON))\r
619 \r
620         switch (message)\r
621         {\r
622                 case WM_INITDIALOG :\r
623                         SendDlgItemMessage(hDlg, TRMODE2_LOCAL, EM_LIMITTEXT, FMAX_PATH, 0);\r
624                         SendDlgItemMessage(hDlg, TRMODE2_LOCAL, WM_SETTEXT, 0, (LPARAM)DefaultLocalPath);\r
625 \r
626                         SetRadioButtonByValue(hDlg, FnameCnv, CnvButton, CNVBUTTONS);\r
627 \r
628                         SendDlgItemMessage(hDlg, TRMODE2_TIMEOUT, EM_LIMITTEXT, (WPARAM)5, 0);\r
629                         sprintf(Tmp, "%d", TimeOut);\r
630                         SendDlgItemMessage(hDlg, TRMODE2_TIMEOUT, WM_SETTEXT, 0, (LPARAM)Tmp);\r
631                         SendDlgItemMessage(hDlg, TRMODE2_TIMEOUT_SPN, UDM_SETRANGE, 0, MAKELONG(300, 0));\r
632                     return(TRUE);\r
633 \r
634                 case WM_NOTIFY:\r
635                         pnmhdr = (NMHDR FAR *)lParam;\r
636                         switch(pnmhdr->code)\r
637                         {\r
638                                 case PSN_APPLY :\r
639                                         SendDlgItemMessage(hDlg, TRMODE2_LOCAL, WM_GETTEXT, FMAX_PATH+1, (LPARAM)DefaultLocalPath);\r
640 \r
641                                         FnameCnv = AskRadioButtonValue(hDlg, CnvButton, CNVBUTTONS);\r
642 \r
643                                         SendDlgItemMessage(hDlg, TRMODE2_TIMEOUT, WM_GETTEXT, 5+1, (LPARAM)Tmp);\r
644                                         TimeOut = atoi(Tmp);\r
645                                         CheckRange2(&TimeOut, 300, 0);\r
646                                         break;\r
647 \r
648                                 case PSN_RESET :\r
649                                         break;\r
650 \r
651                                 case PSN_HELP :\r
652                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000043);\r
653                                         break;\r
654                         }\r
655                         break;\r
656 \r
657                 case WM_COMMAND :\r
658                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
659                         {\r
660                                 case TRMODE2_LOCAL_BR :\r
661                                         if(SelectDir(hDlg, Tmp, FMAX_PATH) == TRUE)\r
662                                                 SendDlgItemMessage(hDlg, TRMODE2_LOCAL, WM_SETTEXT, 0, (LPARAM)Tmp);\r
663                                         break;\r
664                         }\r
665                         return(TRUE);\r
666         }\r
667     return(FALSE);\r
668 }\r
669 \r
670 \r
671 /*----- 転送設定3ウインドウのコールバック ------------------------------------\r
672 *\r
673 *       Parameter\r
674 *               HWND hDlg : ウインドウハンドル\r
675 *               UINT message : メッセージ番号\r
676 *               WPARAM wParam : メッセージの WPARAM 引数\r
677 *               LPARAM lParam : メッセージの LPARAM 引数\r
678 *\r
679 *       Return Value\r
680 *               BOOL TRUE/FALSE\r
681 *----------------------------------------------------------------------------*/\r
682 \r
683 // 64ビット対応\r
684 //static BOOL CALLBACK Trmode3SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
685 static INT_PTR CALLBACK Trmode3SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
686 {\r
687         NMHDR *pnmhdr;\r
688         LV_COLUMN LvCol;\r
689         long Tmp;\r
690         RECT Rect;\r
691         ATTRSET AttrSet;\r
692         char *Fname;\r
693         char *Attr;\r
694         char TmpStr[10];\r
695 \r
696         switch (message)\r
697         {\r
698                 case WM_INITDIALOG :\r
699                     Tmp = SendDlgItemMessage(hDlg, TRMODE3_LIST, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);\r
700                     Tmp |= LVS_EX_FULLROWSELECT;\r
701                 SendDlgItemMessage(hDlg, TRMODE3_LIST, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)Tmp);\r
702 \r
703                         GetClientRect(GetDlgItem(hDlg, TRMODE3_LIST), &Rect);\r
704 \r
705                         LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;\r
706                         LvCol.cx = (Rect.right / 3) * 2;\r
707                         LvCol.pszText = MSGJPN200;\r
708                         LvCol.iSubItem = 0;\r
709                         SendDlgItemMessage(hDlg, TRMODE3_LIST, LVM_INSERTCOLUMN, 0, (LPARAM)&LvCol);\r
710 \r
711                         LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;\r
712                         LvCol.cx = Rect.right - LvCol.cx;\r
713                         LvCol.pszText = MSGJPN201;\r
714                         LvCol.iSubItem = 1;\r
715                         SendDlgItemMessage(hDlg, TRMODE3_LIST, LVM_INSERTCOLUMN, 1, (LPARAM)&LvCol);\r
716 \r
717                         Fname = DefAttrList;\r
718                         while(*Fname != NUL)\r
719                         {\r
720                                 Attr = strchr(Fname, NUL) + 1;\r
721                                 if(*Attr != NUL)\r
722                                         AddFnameAttrToListView(hDlg, Fname, Attr);\r
723                                 Fname = strchr(Attr, NUL) + 1;\r
724                         }\r
725 \r
726                         SendDlgItemMessage(hDlg, TRMODE3_FOLDER, BM_SETCHECK, FolderAttr, 0);\r
727                         if(FolderAttr == NO)\r
728                                 EnableWindow(GetDlgItem(hDlg, TRMODE3_FOLDER_ATTR), FALSE);\r
729 \r
730                         SendDlgItemMessage(hDlg, TRMODE3_FOLDER_ATTR, EM_LIMITTEXT, (WPARAM)5, 0);\r
731                         sprintf(TmpStr, "%03d", FolderAttrNum);\r
732                         SendDlgItemMessage(hDlg, TRMODE3_FOLDER_ATTR, WM_SETTEXT, 0, (LPARAM)TmpStr);\r
733                     return(TRUE);\r
734 \r
735                 case WM_NOTIFY:\r
736                         pnmhdr = (NMHDR FAR *)lParam;\r
737                         switch(pnmhdr->code)\r
738                         {\r
739                                 case PSN_APPLY :\r
740                                         GetFnameAttrFromListView(hDlg, DefAttrList);\r
741                                         SendDlgItemMessage(hDlg, TRMODE3_FOLDER_ATTR, WM_GETTEXT, 5+1, (LPARAM)TmpStr);\r
742                                         FolderAttrNum = atoi(TmpStr);\r
743                                         FolderAttr = SendDlgItemMessage(hDlg, TRMODE3_FOLDER, BM_GETCHECK, 0, 0);\r
744                                         break;\r
745 \r
746                                 case PSN_RESET :\r
747                                         break;\r
748 \r
749                                 case PSN_HELP :\r
750                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000044);\r
751                                         break;\r
752                         }\r
753                         break;\r
754 \r
755                 case WM_COMMAND :\r
756                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
757                         {\r
758                                 case TRMODE3_ADD :\r
759                                         if(DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(def_attr_dlg), hDlg, DefAttrDlgProc, (LPARAM)&AttrSet) == YES)\r
760                                         {\r
761                                                 if((strlen(AttrSet.Fname) > 0) && (strlen(AttrSet.Attr) > 0))\r
762                                                         AddFnameAttrToListView(hDlg, AttrSet.Fname, AttrSet.Attr);\r
763                                         }\r
764                                         break;\r
765 \r
766                                 case TRMODE3_DEL :\r
767                                         if((Tmp = SendDlgItemMessage(hDlg, TRMODE3_LIST, LVM_GETNEXTITEM, -1, MAKELPARAM(LVNI_ALL | LVNI_SELECTED, 0))) != -1)\r
768                                                 SendDlgItemMessage(hDlg, TRMODE3_LIST, LVM_DELETEITEM, Tmp, 0);\r
769                                         break;\r
770 \r
771                                 case TRMODE3_FOLDER :\r
772                                         if(SendDlgItemMessage(hDlg, TRMODE3_FOLDER, BM_GETCHECK, 0, 0) == 1)\r
773                                                 EnableWindow(GetDlgItem(hDlg, TRMODE3_FOLDER_ATTR), TRUE);\r
774                                         else\r
775                                                 EnableWindow(GetDlgItem(hDlg, TRMODE3_FOLDER_ATTR), FALSE);\r
776                                         break;\r
777                         }\r
778                         return(TRUE);\r
779         }\r
780     return(FALSE);\r
781 }\r
782 \r
783 \r
784 // UTF-8対応\r
785 static INT_PTR CALLBACK Trmode4SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
786 {\r
787         NMHDR *pnmhdr;\r
788 \r
789         static const RADIOBUTTON KanjiButton[] = {\r
790                 { TRMODE4_SJIS_CNV, KANJI_SJIS },\r
791                 { TRMODE4_JIS_CNV, KANJI_JIS },\r
792                 { TRMODE4_EUC_CNV, KANJI_EUC },\r
793                 { TRMODE4_UTF8N_CNV, KANJI_UTF8N },\r
794                 { TRMODE4_UTF8BOM_CNV, KANJI_UTF8BOM }\r
795         };\r
796         #define KANJIBUTTONS    (sizeof(KanjiButton)/sizeof(RADIOBUTTON))\r
797 \r
798         switch (message)\r
799         {\r
800                 case WM_INITDIALOG :\r
801                         SetRadioButtonByValue(hDlg, AskLocalKanjiCode(), KanjiButton, KANJIBUTTONS);\r
802 \r
803                     return(TRUE);\r
804 \r
805                 case WM_NOTIFY:\r
806                         pnmhdr = (NMHDR FAR *)lParam;\r
807                         switch(pnmhdr->code)\r
808                         {\r
809                                 case PSN_APPLY :\r
810                                         SetLocalKanjiCodeImm(AskRadioButtonValue(hDlg, KanjiButton, KANJIBUTTONS));\r
811                                         SaveLocalKanjiCode();\r
812                                         break;\r
813 \r
814                                 case PSN_RESET :\r
815                                         break;\r
816 \r
817                                 case PSN_HELP :\r
818                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000067);\r
819                                         break;\r
820                         }\r
821                         break;\r
822         }\r
823     return(FALSE);\r
824 }\r
825 \r
826 \r
827 /*----- ファイル属性設定ウインドウのコールバック ------------------------------\r
828 *\r
829 *       Parameter\r
830 *               HWND hDlg : ウインドウハンドル\r
831 *               UINT message : メッセージ番号\r
832 *               WPARAM wParam : メッセージの WPARAM 引数\r
833 *               LPARAM lParam : メッセージの LPARAM 引数\r
834 *\r
835 *       Return Value\r
836 *               BOOL TRUE/FALSE\r
837 *----------------------------------------------------------------------------*/\r
838 \r
839 // 64ビット対応\r
840 //static BOOL CALLBACK DefAttrDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
841 static INT_PTR CALLBACK DefAttrDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
842 {\r
843         static ATTRSET *AttrSet;\r
844         char Tmp[5];\r
845 \r
846         switch (message)\r
847         {\r
848                 case WM_INITDIALOG :\r
849                         AttrSet = (ATTRSET *)lParam;\r
850                         SendDlgItemMessage(hDlg, DEFATTR_FNAME, EM_LIMITTEXT, (WPARAM)FMAX_PATH, 0);\r
851                         SendDlgItemMessage(hDlg, DEFATTR_ATTR, EM_LIMITTEXT, (WPARAM)4, 0);\r
852                     return(TRUE);\r
853 \r
854                 case WM_COMMAND :\r
855                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
856                         {\r
857                                 case IDOK :\r
858                                         SendDlgItemMessage(hDlg, DEFATTR_FNAME, WM_GETTEXT, (WPARAM)FMAX_PATH+1, (LPARAM)AttrSet->Fname);\r
859                                         SendDlgItemMessage(hDlg, DEFATTR_ATTR, WM_GETTEXT, (WPARAM)4+1, (LPARAM)AttrSet->Attr);\r
860                                         EndDialog(hDlg, YES);\r
861                                         break;\r
862 \r
863                                 case IDCANCEL :\r
864                                         EndDialog(hDlg, NO);\r
865                                         break;\r
866 \r
867                                 case DEFATTR_ATTR_BR :\r
868                                         SendDlgItemMessage(hDlg, DEFATTR_ATTR, WM_GETTEXT, (WPARAM)4+1, (LPARAM)Tmp);\r
869                                         if(DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(chmod_dlg), GetMainHwnd(), ChmodDialogCallBack, (LPARAM)Tmp) == YES)\r
870                                                 SendDlgItemMessage(hDlg, DEFATTR_ATTR, WM_SETTEXT, 0, (LPARAM)Tmp);\r
871                                         break;\r
872                         }\r
873                         return(TRUE);\r
874         }\r
875     return(FALSE);\r
876 }\r
877 \r
878 \r
879 /*----- ファイル名と属性をリストビューに追加 ----------------------------------\r
880 *\r
881 *       Parameter\r
882 *               HWND hDlg : ウインドウハンドル\r
883 *               char *Fname : ファイル名\r
884 *               char *Attr : 属性\r
885 *\r
886 *       Return Value\r
887 *               なし\r
888 *----------------------------------------------------------------------------*/\r
889 \r
890 static void AddFnameAttrToListView(HWND hDlg, char *Fname, char *Attr)\r
891 {\r
892         int Num;\r
893         LV_ITEM LvItem;\r
894         char Buf[DEFATTRLIST_LEN+1];\r
895 \r
896         GetFnameAttrFromListView(hDlg, Buf);\r
897         if(StrMultiLen(Buf) + strlen(Fname) + strlen(Attr) + 2 <= DEFATTRLIST_LEN)\r
898         {\r
899                 Num = SendDlgItemMessage(hDlg, TRMODE3_LIST, LVM_GETITEMCOUNT, 0, 0);\r
900 \r
901                 LvItem.mask = LVIF_TEXT;\r
902                 LvItem.iItem = Num;\r
903                 LvItem.iSubItem = 0;\r
904                 LvItem.pszText = Fname;\r
905                 SendDlgItemMessage(hDlg, TRMODE3_LIST, LVM_INSERTITEM, 0, (LPARAM)&LvItem);\r
906 \r
907                 LvItem.mask = LVIF_TEXT;\r
908                 LvItem.iItem = Num;\r
909                 LvItem.iSubItem = 1;\r
910                 LvItem.pszText = Attr;\r
911                 SendDlgItemMessage(hDlg, TRMODE3_LIST, LVM_SETITEM, 0, (LPARAM)&LvItem);\r
912         }\r
913         else\r
914                 MessageBeep(-1);\r
915 \r
916         return;\r
917 }\r
918 \r
919 \r
920 /*----- リストビューの内容をマルチ文字列にする --------------------------------\r
921 *\r
922 *       Parameter\r
923 *               HWND hDlg : ダイアログボックスのウインドウハンドル\r
924 *               int CtrlList : リストボックスのID\r
925 *               char *Buf : 文字列をセットするバッファ\r
926 *               int BufSize : バッファのサイズ\r
927 *\r
928 *       Return Value\r
929 *               なし\r
930 *----------------------------------------------------------------------------*/\r
931 \r
932 static void GetFnameAttrFromListView(HWND hDlg, char *Buf)\r
933 {\r
934         int Num;\r
935         int i;\r
936         LV_ITEM LvItem;\r
937 \r
938         Num = SendDlgItemMessage(hDlg, TRMODE3_LIST, LVM_GETITEMCOUNT, 0, 0);\r
939         for(i = 0; i < Num; i++)\r
940         {\r
941                 LvItem.mask = LVIF_TEXT;\r
942                 LvItem.iItem = i;\r
943                 LvItem.iSubItem = 0;\r
944                 LvItem.pszText = Buf;\r
945                 LvItem.cchTextMax = FMAX_PATH;\r
946                 SendDlgItemMessage(hDlg, TRMODE3_LIST, LVM_GETITEM, 0, (LPARAM)&LvItem);\r
947                 Buf = strchr(Buf, NUL) + 1;\r
948 \r
949                 LvItem.mask = LVIF_TEXT;\r
950                 LvItem.iItem = i;\r
951                 LvItem.iSubItem = 1;\r
952                 LvItem.pszText = Buf;\r
953                 LvItem.cchTextMax = FMAX_PATH;\r
954                 SendDlgItemMessage(hDlg, TRMODE3_LIST, LVM_GETITEM, 0, (LPARAM)&LvItem);\r
955                 Buf = strchr(Buf, NUL) + 1;\r
956         }\r
957         *Buf = NUL;\r
958 \r
959         return;\r
960 }\r
961 \r
962 \r
963 /*----- ミラーリングウインドウのコールバック ----------------------------------\r
964 *\r
965 *       Parameter\r
966 *               HWND hDlg : ウインドウハンドル\r
967 *               UINT message : メッセージ番号\r
968 *               WPARAM wParam : メッセージの WPARAM 引数\r
969 *               LPARAM lParam : メッセージの LPARAM 引数\r
970 *\r
971 *       Return Value\r
972 *               BOOL TRUE/FALSE\r
973 *----------------------------------------------------------------------------*/\r
974 \r
975 // 64ビット対応\r
976 //static BOOL CALLBACK MirrorSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
977 static INT_PTR CALLBACK MirrorSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
978 {\r
979         NMHDR *pnmhdr;\r
980         int Num;\r
981         char Tmp[FMAX_PATH+1];\r
982         int Trash;\r
983 \r
984         switch (message)\r
985         {\r
986                 case WM_INITDIALOG :\r
987                         SetMultiTextToList(hDlg, MIRROR_NOTRN_LIST, MirrorNoTrn);\r
988                         SetMultiTextToList(hDlg, MIRROR_NODEL_LIST, MirrorNoDel);\r
989                         SendDlgItemMessage(hDlg, MIRROR_LOW, BM_SETCHECK, MirrorFnameCnv, 0);\r
990                         SendDlgItemMessage(hDlg, MIRROR_UPDEL_NOTIFY, BM_SETCHECK, MirUpDelNotify, 0);\r
991                         SendDlgItemMessage(hDlg, MIRROR_DOWNDEL_NOTIFY, BM_SETCHECK, MirDownDelNotify, 0);\r
992                     return(TRUE);\r
993 \r
994                 case WM_NOTIFY:\r
995                         pnmhdr = (NMHDR FAR *)lParam;\r
996                         switch(pnmhdr->code)\r
997                         {\r
998                                 case PSN_APPLY :\r
999                                         GetMultiTextFromList(hDlg, MIRROR_NOTRN_LIST, MirrorNoTrn, MIRROR_LEN+1);\r
1000                                         GetMultiTextFromList(hDlg, MIRROR_NODEL_LIST, MirrorNoDel, MIRROR_LEN+1);\r
1001                                         MirrorFnameCnv = SendDlgItemMessage(hDlg, MIRROR_LOW, BM_GETCHECK, 0, 0);\r
1002                                         MirUpDelNotify = SendDlgItemMessage(hDlg, MIRROR_UPDEL_NOTIFY, BM_GETCHECK, 0, 0);\r
1003                                         MirDownDelNotify = SendDlgItemMessage(hDlg, MIRROR_DOWNDEL_NOTIFY, BM_GETCHECK, 0, 0);\r
1004                                         break;\r
1005 \r
1006                                 case PSN_RESET :\r
1007                                         break;\r
1008 \r
1009                                 case PSN_HELP :\r
1010                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000045);\r
1011                                         break;\r
1012                         }\r
1013                         break;\r
1014 \r
1015                 case WM_COMMAND :\r
1016                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1017                         {\r
1018                                 case MIRROR_NOTRN_ADD :\r
1019                                         strcpy(Tmp, "");\r
1020                                         if(InputDialogBox(fname_in_dlg, hDlg, MSGJPN202, Tmp, FMAX_PATH, &Trash, IDH_HELP_TOPIC_0000001) == YES)\r
1021                                                 AddTextToListBox(hDlg, Tmp, MIRROR_NOTRN_LIST, MIRROR_LEN+1);\r
1022                                         break;\r
1023 \r
1024                                 case MIRROR_NODEL_ADD :\r
1025                                         strcpy(Tmp, "");\r
1026                                         if(InputDialogBox(fname_in_dlg, hDlg, MSGJPN203, Tmp, FMAX_PATH, &Trash, IDH_HELP_TOPIC_0000001) == YES)\r
1027                                                 AddTextToListBox(hDlg, Tmp, MIRROR_NODEL_LIST, MIRROR_LEN+1);\r
1028                                         break;\r
1029 \r
1030                                 case MIRROR_NOTRN_DEL :\r
1031                                         if((Num = SendDlgItemMessage(hDlg, MIRROR_NOTRN_LIST, LB_GETCURSEL, 0, 0)) != LB_ERR)\r
1032                                                 SendDlgItemMessage(hDlg, MIRROR_NOTRN_LIST, LB_DELETESTRING, Num, 0);\r
1033                                         break;\r
1034 \r
1035                                 case MIRROR_NODEL_DEL :\r
1036                                         if((Num = SendDlgItemMessage(hDlg, MIRROR_NODEL_LIST, LB_GETCURSEL, 0, 0)) != LB_ERR)\r
1037                                                 SendDlgItemMessage(hDlg, MIRROR_NODEL_LIST, LB_DELETESTRING, Num, 0);\r
1038                                         break;\r
1039                         }\r
1040                         return(TRUE);\r
1041         }\r
1042     return(FALSE);\r
1043 }\r
1044 \r
1045 \r
1046 /*----- 操作設定ウインドウのコールバック --------------------------------------\r
1047 *\r
1048 *       Parameter\r
1049 *               HWND hDlg : ウインドウハンドル\r
1050 *               UINT message : メッセージ番号\r
1051 *               WPARAM wParam : メッセージの WPARAM 引数\r
1052 *               LPARAM lParam : メッセージの LPARAM 引数\r
1053 *\r
1054 *       Return Value\r
1055 *               BOOL TRUE/FALSE\r
1056 *----------------------------------------------------------------------------*/\r
1057 \r
1058 // 64ビット対応\r
1059 //static BOOL CALLBACK NotifySettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1060 static INT_PTR CALLBACK NotifySettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1061 {\r
1062         NMHDR *pnmhdr;\r
1063 \r
1064         static const RADIOBUTTON DownButton[] = {\r
1065                 { NOTIFY_D_DLG, TRANS_DLG },\r
1066                 { NOTIFY_D_OVW, TRANS_OVW }\r
1067         };\r
1068         #define DOWNBUTTONS     (sizeof(DownButton)/sizeof(RADIOBUTTON))\r
1069 \r
1070         static const RADIOBUTTON UpButton[] = {\r
1071                 { NOTIFY_U_DLG, TRANS_DLG },\r
1072                 { NOTIFY_U_OVW, TRANS_OVW }\r
1073         };\r
1074         #define UPBUTTONS       (sizeof(UpButton)/sizeof(RADIOBUTTON))\r
1075 \r
1076         static const RADIOBUTTON DclickButton[] = {\r
1077                 { NOTIFY_OPEN,     YES },\r
1078                 { NOTIFY_DOWNLOAD, NO }\r
1079         };\r
1080         #define DCLICKBUTTONS   (sizeof(DclickButton)/sizeof(RADIOBUTTON))\r
1081 \r
1082         static const RADIOBUTTON MoveButton[] = {\r
1083                 { NOTIFY_M_NODLG,   MOVE_NODLG },\r
1084                 { NOTIFY_M_DLG,     MOVE_DLG },\r
1085                 { NOTIFY_M_DISABLE, MOVE_DISABLE }\r
1086         };\r
1087         #define MOVEBUTTONS     (sizeof(MoveButton)/sizeof(RADIOBUTTON))\r
1088 \r
1089         switch (message)\r
1090         {\r
1091                 case WM_INITDIALOG :\r
1092                         SetRadioButtonByValue(hDlg, RecvMode,   DownButton,   DOWNBUTTONS);\r
1093                         SetRadioButtonByValue(hDlg, SendMode,   UpButton,     UPBUTTONS);\r
1094                         SetRadioButtonByValue(hDlg, DclickOpen, DclickButton, DCLICKBUTTONS);\r
1095                         SetRadioButtonByValue(hDlg, MoveMode,   MoveButton,   MOVEBUTTONS);\r
1096                     return(TRUE);\r
1097 \r
1098                 case WM_NOTIFY:\r
1099                         pnmhdr = (NMHDR FAR *)lParam;\r
1100                         switch(pnmhdr->code)\r
1101                         {\r
1102                                 case PSN_APPLY :\r
1103                                         RecvMode   = AskRadioButtonValue(hDlg, DownButton,   DOWNBUTTONS);\r
1104                                         SendMode   = AskRadioButtonValue(hDlg, UpButton,     UPBUTTONS);\r
1105                                         DclickOpen = AskRadioButtonValue(hDlg, DclickButton, DCLICKBUTTONS);\r
1106                                         MoveMode   = AskRadioButtonValue(hDlg, MoveButton,   MOVEBUTTONS);\r
1107                                         break;\r
1108 \r
1109                                 case PSN_RESET :\r
1110                                         break;\r
1111 \r
1112                                 case PSN_HELP :\r
1113                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000046);\r
1114                                         break;\r
1115                         }\r
1116                         break;\r
1117         }\r
1118     return(FALSE);\r
1119 }\r
1120 \r
1121 \r
1122 /*----- 表示設定ウインドウのコールバック --------------------------------------\r
1123 *\r
1124 *       Parameter\r
1125 *               HWND hDlg : ウインドウハンドル\r
1126 *               UINT message : メッセージ番号\r
1127 *               WPARAM wParam : メッセージの WPARAM 引数\r
1128 *               LPARAM lParam : メッセージの LPARAM 引数\r
1129 *\r
1130 *       Return Value\r
1131 *               BOOL TRUE/FALSE\r
1132 *----------------------------------------------------------------------------*/\r
1133 \r
1134 // 64ビット対応\r
1135 // ファイルの属性を数字で表示\r
1136 //static BOOL CALLBACK DispSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1137 static INT_PTR CALLBACK Disp1SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1138 {\r
1139         NMHDR *pnmhdr;\r
1140         static LOGFONT TmpFont;\r
1141 \r
1142         switch (message)\r
1143         {\r
1144                 case WM_INITDIALOG :\r
1145                         memcpy(&TmpFont, &ListLogFont, sizeof(LOGFONT));\r
1146                         if(ListFont != NULL)\r
1147                                 SendDlgItemMessage(hDlg, DISP_FONT, WM_SETTEXT, 0, (LPARAM)TmpFont.lfFaceName);\r
1148                         SendDlgItemMessage(hDlg, DISP_HIDE, BM_SETCHECK, DispIgnoreHide, 0);\r
1149                         SendDlgItemMessage(hDlg, DISP_DRIVE, BM_SETCHECK, DispDrives, 0);\r
1150                         // ファイルアイコン表示対応\r
1151                         SendDlgItemMessage(hDlg, DISP_ICON, BM_SETCHECK, DispFileIcon, 0);\r
1152                         // タイムスタンプのバグ修正\r
1153                         SendDlgItemMessage(hDlg, DISP_SECOND, BM_SETCHECK, DispTimeSeconds, 0);\r
1154                     return(TRUE);\r
1155 \r
1156                 case WM_NOTIFY:\r
1157                         pnmhdr = (NMHDR FAR *)lParam;\r
1158                         switch(pnmhdr->code)\r
1159                         {\r
1160                                 case PSN_APPLY :\r
1161                                         DispIgnoreHide = SendDlgItemMessage(hDlg, DISP_HIDE, BM_GETCHECK, 0, 0);\r
1162                                         DispDrives = SendDlgItemMessage(hDlg, DISP_DRIVE, BM_GETCHECK, 0, 0);\r
1163                                         // ファイルアイコン表示対応\r
1164                                         DispFileIcon = SendDlgItemMessage(hDlg, DISP_ICON, BM_GETCHECK, 0, 0);\r
1165                                         // タイムスタンプのバグ修正\r
1166                                         DispTimeSeconds = SendDlgItemMessage(hDlg, DISP_SECOND, BM_GETCHECK, 0, 0);\r
1167                                         if(strlen(TmpFont.lfFaceName) > 0)\r
1168                                         {\r
1169                                                 memcpy(&ListLogFont, &TmpFont, sizeof(LOGFONT));\r
1170                                                 ListFont = CreateFontIndirect(&ListLogFont);\r
1171                                         }\r
1172                                         break;\r
1173 \r
1174                                 case PSN_RESET :\r
1175                                         break;\r
1176 \r
1177                                 case PSN_HELP :\r
1178                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000047);\r
1179                                         break;\r
1180                         }\r
1181                         break;\r
1182 \r
1183                 case WM_COMMAND :\r
1184                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1185                         {\r
1186                                 case DISP_FONT_BR :\r
1187                                         if(SelectListFont(hDlg, &TmpFont) == YES)\r
1188                                                 SendDlgItemMessage(hDlg, DISP_FONT, WM_SETTEXT, 0, (LPARAM)TmpFont.lfFaceName);\r
1189                                         break;\r
1190                         }\r
1191                         return(TRUE);\r
1192         }\r
1193     return(FALSE);\r
1194 }\r
1195 \r
1196 \r
1197 // ファイルの属性を数字で表示\r
1198 // ローカル側自動更新\r
1199 static INT_PTR CALLBACK Disp2SettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1200 {\r
1201         NMHDR *pnmhdr;\r
1202         static LOGFONT TmpFont;\r
1203 \r
1204         switch (message)\r
1205         {\r
1206                 case WM_INITDIALOG :\r
1207                         SendDlgItemMessage(hDlg, DISP2_PERMIT_NUM, BM_SETCHECK, DispPermissionsNumber, 0);\r
1208                         SendDlgItemMessage(hDlg, DISP2_AUTO_REFRESH, BM_SETCHECK, AutoRefreshFileList, 0);\r
1209                         SendDlgItemMessage(hDlg, DISP2_REMOVE_OLD_LOG, BM_SETCHECK, RemoveOldLog, 0);\r
1210                     return(TRUE);\r
1211 \r
1212                 case WM_NOTIFY:\r
1213                         pnmhdr = (NMHDR FAR *)lParam;\r
1214                         switch(pnmhdr->code)\r
1215                         {\r
1216                                 case PSN_APPLY :\r
1217                                         DispPermissionsNumber = SendDlgItemMessage(hDlg, DISP2_PERMIT_NUM, BM_GETCHECK, 0, 0);\r
1218                                         AutoRefreshFileList = SendDlgItemMessage(hDlg, DISP2_AUTO_REFRESH, BM_GETCHECK, 0, 0);\r
1219                                         RemoveOldLog = SendDlgItemMessage(hDlg, DISP2_REMOVE_OLD_LOG, BM_GETCHECK, 0, 0);\r
1220                                         break;\r
1221 \r
1222                                 case PSN_RESET :\r
1223                                         break;\r
1224 \r
1225                                 case PSN_HELP :\r
1226                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000068);\r
1227                                         break;\r
1228                         }\r
1229                         break;\r
1230         }\r
1231     return(FALSE);\r
1232 }\r
1233 \r
1234 \r
1235 /*----- フォントを選ぶ --------------------------------------------------------\r
1236 *\r
1237 *       Parameter\r
1238 *               HWND hWnd : ウインドウハンドル\r
1239 *               LOGFONT *lFont : フォント情報\r
1240 *\r
1241 *       Return Value\r
1242 *               なし\r
1243 *\r
1244 *       Parameter change\r
1245 *               HFONT *hFont : フォントのハンドル\r
1246 *               LOGFONT *lFont : フォント情報\r
1247 *----------------------------------------------------------------------------*/\r
1248 \r
1249 static int SelectListFont(HWND hWnd, LOGFONT *lFont)\r
1250 {\r
1251         static CHOOSEFONT cFont;\r
1252         int Sts;\r
1253 \r
1254         cFont.lStructSize = sizeof(CHOOSEFONT);\r
1255         cFont.hwndOwner = hWnd;\r
1256         cFont.hDC = 0;\r
1257         cFont.lpLogFont = lFont;\r
1258         cFont.Flags = CF_FORCEFONTEXIST | CF_SCREENFONTS | CF_INITTOLOGFONTSTRUCT;\r
1259         cFont.nFontType = SCREEN_FONTTYPE;\r
1260 \r
1261         Sts = NO;\r
1262         if(ChooseFont(&cFont) == TRUE)\r
1263                 Sts = YES;\r
1264 \r
1265         return(Sts);\r
1266 }\r
1267 \r
1268 \r
1269 /*----- 接続/切断設定ウインドウのコールバック --------------------------------\r
1270 *\r
1271 *       Parameter\r
1272 *               HWND hDlg : ウインドウハンドル\r
1273 *               UINT message : メッセージ番号\r
1274 *               WPARAM wParam : メッセージの WPARAM 引数\r
1275 *               LPARAM lParam : メッセージの LPARAM 引数\r
1276 *\r
1277 *       Return Value\r
1278 *               BOOL TRUE/FALSE\r
1279 *----------------------------------------------------------------------------*/\r
1280 \r
1281 // 64ビット対応\r
1282 //static BOOL CALLBACK ConnectSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1283 static INT_PTR CALLBACK ConnectSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1284 {\r
1285         NMHDR *pnmhdr;\r
1286 \r
1287         switch (message)\r
1288         {\r
1289                 case WM_INITDIALOG :\r
1290                         SendDlgItemMessage(hDlg, CONNECT_CONNECT, BM_SETCHECK, ConnectOnStart, 0);\r
1291                         SendDlgItemMessage(hDlg, CONNECT_OLDDLG, BM_SETCHECK, ConnectAndSet, 0);\r
1292                         SendDlgItemMessage(hDlg, CONNECT_RASCLOSE, BM_SETCHECK, RasClose, 0);\r
1293                         if(AskRasUsable() == NO)\r
1294                                 EnableWindow(GetDlgItem(hDlg, CONNECT_RASCLOSE), FALSE);\r
1295                         SendDlgItemMessage(hDlg, CONNECT_CLOSE_NOTIFY, BM_SETCHECK, RasCloseNotify, 0);\r
1296                         if((RasClose == NO) || (AskRasUsable() == NO))\r
1297                                 EnableWindow(GetDlgItem(hDlg, CONNECT_CLOSE_NOTIFY), FALSE);\r
1298                         SendDlgItemMessage(hDlg, CONNECT_HIST, EM_LIMITTEXT, (WPARAM)2, 0);\r
1299                         SetDecimalText(hDlg, CONNECT_HIST, FileHist);\r
1300                         SendDlgItemMessage(hDlg, CONNECT_HIST_SPN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(HISTORY_MAX, 0));\r
1301                         SendDlgItemMessage(hDlg, CONNECT_QUICK_ANONY, BM_SETCHECK, QuickAnonymous, 0);\r
1302                         SendDlgItemMessage(hDlg, CONNECT_HIST_PASS, BM_SETCHECK, PassToHist, 0);\r
1303                         SendDlgItemMessage(hDlg, CONNECT_SENDQUIT, BM_SETCHECK, SendQuit, 0);\r
1304                         SendDlgItemMessage(hDlg, CONNECT_NORAS, BM_SETCHECK, NoRasControl, 0);\r
1305                         // UPnP対応\r
1306                         SendDlgItemMessage(hDlg, CONNECT_UPNP, BM_SETCHECK, UPnPEnabled, 0);\r
1307                     return(TRUE);\r
1308 \r
1309                 case WM_NOTIFY:\r
1310                         pnmhdr = (NMHDR FAR *)lParam;\r
1311                         switch(pnmhdr->code)\r
1312                         {\r
1313                                 case PSN_APPLY :\r
1314                                         ConnectOnStart = SendDlgItemMessage(hDlg, MISC_CONNECT, BM_GETCHECK, 0, 0);\r
1315                                         ConnectAndSet = SendDlgItemMessage(hDlg, MISC_OLDDLG, BM_GETCHECK, 0, 0);\r
1316                                         RasClose = SendDlgItemMessage(hDlg, CONNECT_RASCLOSE, BM_GETCHECK, 0, 0);\r
1317                                         RasCloseNotify = SendDlgItemMessage(hDlg, CONNECT_CLOSE_NOTIFY, BM_GETCHECK, 0, 0);\r
1318                                         FileHist = GetDecimalText(hDlg, CONNECT_HIST);\r
1319                                         CheckRange2(&FileHist, HISTORY_MAX, 0);\r
1320                                         QuickAnonymous = SendDlgItemMessage(hDlg, CONNECT_QUICK_ANONY, BM_GETCHECK, 0, 0);\r
1321                                         PassToHist = SendDlgItemMessage(hDlg, CONNECT_HIST_PASS, BM_GETCHECK, 0, 0);\r
1322                                         SendQuit = SendDlgItemMessage(hDlg, CONNECT_SENDQUIT, BM_GETCHECK, 0, 0);\r
1323                                         NoRasControl = SendDlgItemMessage(hDlg, CONNECT_NORAS, BM_GETCHECK, 0, 0);\r
1324                                         // UPnP対応\r
1325                                         if(IsUPnPLoaded() == YES)\r
1326                                                 UPnPEnabled = SendDlgItemMessage(hDlg, CONNECT_UPNP, BM_GETCHECK, 0, 0);\r
1327                                         break;\r
1328 \r
1329                                 case PSN_RESET :\r
1330                                         break;\r
1331 \r
1332                                 case PSN_HELP :\r
1333                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000048);\r
1334                                         break;\r
1335                         }\r
1336                         break;\r
1337 \r
1338                 case WM_COMMAND :\r
1339                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1340                         {\r
1341                                 case CONNECT_RASCLOSE :\r
1342                                         if(SendDlgItemMessage(hDlg, CONNECT_RASCLOSE, BM_GETCHECK, 0, 0) == 1)\r
1343                                                 EnableWindow(GetDlgItem(hDlg, CONNECT_CLOSE_NOTIFY), TRUE);\r
1344                                         else\r
1345                                                 EnableWindow(GetDlgItem(hDlg, CONNECT_CLOSE_NOTIFY), FALSE);\r
1346                                         break;\r
1347                         }\r
1348                         return(TRUE);\r
1349         }\r
1350     return(FALSE);\r
1351 }\r
1352 \r
1353 \r
1354 /*----- FireWall設定ウインドウのコールバック ----------------------------------\r
1355 *\r
1356 *       Parameter\r
1357 *               HWND hDlg : ウインドウハンドル\r
1358 *               UINT message : メッセージ番号\r
1359 *               WPARAM wParam : メッセージの WPARAM 引数\r
1360 *               LPARAM lParam : メッセージの LPARAM 引数\r
1361 *\r
1362 *       Return Value\r
1363 *               BOOL TRUE/FALSE\r
1364 *----------------------------------------------------------------------------*/\r
1365 \r
1366 // 64ビット対応\r
1367 //static BOOL CALLBACK FireSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1368 static INT_PTR CALLBACK FireSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1369 {\r
1370         NMHDR *pnmhdr;\r
1371         char Tmp[10];\r
1372         int Num;\r
1373         static int Type;\r
1374         static const INTCONVTBL TypeTbl[] = {\r
1375                 { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 8 }, \r
1376                 { 4, 3 }, { 5, 4 }, { 6, 5 }, { 7, 6 }, \r
1377                 { 8, 7 }, { 9, 9 }\r
1378         };\r
1379 \r
1380         static const int HideTbl[9][6] = {\r
1381                 { TRUE,  TRUE,  TRUE,  FALSE, TRUE,  FALSE },\r
1382                 { TRUE,  TRUE,  TRUE,  FALSE, FALSE, TRUE  },\r
1383                 { TRUE,  TRUE,  TRUE,  FALSE, FALSE, FALSE },\r
1384                 { FALSE, FALSE, FALSE, FALSE, FALSE, TRUE  },\r
1385                 { FALSE, FALSE, FALSE, FALSE, TRUE,  FALSE },\r
1386                 { TRUE,  FALSE, FALSE, FALSE, FALSE, FALSE },\r
1387                 { FALSE, FALSE, FALSE, TRUE,  FALSE, FALSE },\r
1388                 { TRUE,  TRUE,  FALSE, TRUE,  FALSE, FALSE },\r
1389                 { TRUE,  TRUE,  FALSE, FALSE, TRUE,  TRUE  }\r
1390         };\r
1391 \r
1392         switch (message)\r
1393         {\r
1394                 case WM_INITDIALOG :\r
1395                         // プロセス保護\r
1396                         ProtectAllEditControls(hDlg);\r
1397                         Type = ConvertNum(FwallType, 1, TypeTbl, sizeof(TypeTbl)/sizeof(INTCONVTBL));\r
1398                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN204);\r
1399                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN205);\r
1400                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN206);\r
1401                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN207);\r
1402                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN208);\r
1403                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN209);\r
1404                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN210);\r
1405                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN211);\r
1406                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN294);\r
1407                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_SETCURSEL, Type-1, 0);\r
1408 \r
1409                         SendDlgItemMessage(hDlg, FIRE_HOST, EM_LIMITTEXT, HOST_ADRS_LEN, 0);\r
1410                         SendDlgItemMessage(hDlg, FIRE_USER, EM_LIMITTEXT, USER_NAME_LEN, 0);\r
1411                         SendDlgItemMessage(hDlg, FIRE_PASS, EM_LIMITTEXT, PASSWORD_LEN, 0);\r
1412                         SendDlgItemMessage(hDlg, FIRE_PORT, EM_LIMITTEXT, 5, 0);\r
1413                         SendDlgItemMessage(hDlg, FIRE_DELIMIT, EM_LIMITTEXT, 1, 0);\r
1414 \r
1415                         SendDlgItemMessage(hDlg, FIRE_HOST, WM_SETTEXT, 0, (LPARAM)FwallHost);\r
1416                         SendDlgItemMessage(hDlg, FIRE_USER, WM_SETTEXT, 0, (LPARAM)FwallUser);\r
1417                         SendDlgItemMessage(hDlg, FIRE_PASS, WM_SETTEXT, 0, (LPARAM)FwallPass);\r
1418                         sprintf(Tmp, "%d", FwallPort);\r
1419                         SendDlgItemMessage(hDlg, FIRE_PORT, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1420                         sprintf(Tmp, "%c", FwallDelimiter);\r
1421                         SendDlgItemMessage(hDlg, FIRE_DELIMIT, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1422 \r
1423                         SendDlgItemMessage(hDlg, FIRE_USEIT, BM_SETCHECK, FwallDefault, 0);\r
1424                         SendDlgItemMessage(hDlg, FIRE_PASV, BM_SETCHECK, PasvDefault, 0);\r
1425                         SendDlgItemMessage(hDlg, FIRE_RESOLV, BM_SETCHECK, FwallResolve, 0);\r
1426                         SendDlgItemMessage(hDlg, FIRE_LOWER, BM_SETCHECK, FwallLower, 0);\r
1427 \r
1428                         SendDlgItemMessage(hDlg, FIRE_SECURITY, CB_ADDSTRING, 0, (LPARAM)MSGJPN212);\r
1429                         SendDlgItemMessage(hDlg, FIRE_SECURITY, CB_ADDSTRING, 0, (LPARAM)MSGJPN213);\r
1430                         SendDlgItemMessage(hDlg, FIRE_SECURITY, CB_ADDSTRING, 0, (LPARAM)MSGJPN214);\r
1431                         SendDlgItemMessage(hDlg, FIRE_SECURITY, CB_ADDSTRING, 0, (LPARAM)MSGJPN215);\r
1432                         SendDlgItemMessage(hDlg, FIRE_SECURITY, CB_ADDSTRING, 0, (LPARAM)MSGJPN216);\r
1433                         SendDlgItemMessage(hDlg, FIRE_SECURITY, CB_SETCURSEL, FwallSecurity, 0);\r
1434                     return(TRUE);\r
1435 \r
1436                 case WM_NOTIFY:\r
1437                         pnmhdr = (NMHDR FAR *)lParam;\r
1438                         switch(pnmhdr->code)\r
1439                         {\r
1440                                 case PSN_APPLY :\r
1441                                         Type = SendDlgItemMessage(hDlg, FIRE_TYPE, CB_GETCURSEL, 0, 0) + 1;\r
1442                                         FwallType = ConvertNum(Type, 0, TypeTbl, sizeof(TypeTbl)/sizeof(INTCONVTBL));\r
1443                                         SendDlgItemMessage(hDlg, FIRE_HOST, WM_GETTEXT, HOST_ADRS_LEN+1, (LPARAM)FwallHost);\r
1444                                         SendDlgItemMessage(hDlg, FIRE_USER, WM_GETTEXT, USER_NAME_LEN+1, (LPARAM)FwallUser);\r
1445                                         SendDlgItemMessage(hDlg, FIRE_PASS, WM_GETTEXT, PASSWORD_LEN, (LPARAM)FwallPass);\r
1446                                         SendDlgItemMessage(hDlg, FIRE_PORT, WM_GETTEXT, 5+1, (LPARAM)Tmp);\r
1447                                         FwallPort = atoi(Tmp);\r
1448                                         SendDlgItemMessage(hDlg, FIRE_DELIMIT, WM_GETTEXT, 5, (LPARAM)Tmp);\r
1449                                         FwallDelimiter = Tmp[0];\r
1450                                         FwallDefault = SendDlgItemMessage(hDlg, FIRE_USEIT, BM_GETCHECK, 0, 0);\r
1451                                         PasvDefault = SendDlgItemMessage(hDlg, FIRE_PASV, BM_GETCHECK, 0, 0);\r
1452                                         FwallResolve = SendDlgItemMessage(hDlg, FIRE_RESOLV, BM_GETCHECK, 0, 0);\r
1453                                         FwallLower = SendDlgItemMessage(hDlg, FIRE_LOWER, BM_GETCHECK, 0, 0);\r
1454                                         FwallSecurity = SendDlgItemMessage(hDlg, FIRE_SECURITY, CB_GETCURSEL, 0, 0);\r
1455                                         break;\r
1456 \r
1457                                 case PSN_RESET :\r
1458                                         break;\r
1459 \r
1460                                 case PSN_HELP :\r
1461                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000049);\r
1462                                         break;\r
1463                         }\r
1464                         break;\r
1465 \r
1466                 case WM_COMMAND :\r
1467                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1468                         {\r
1469                                 case FIRE_TYPE :\r
1470                                         Num = SendDlgItemMessage(hDlg, FIRE_TYPE, CB_GETCURSEL, 0, 0);\r
1471                                         EnableWindow(GetDlgItem(hDlg, FIRE_USER), HideTbl[Num][0]);\r
1472                                         EnableWindow(GetDlgItem(hDlg, FIRE_PASS), HideTbl[Num][1]);\r
1473                                         EnableWindow(GetDlgItem(hDlg, FIRE_SECURITY), HideTbl[Num][2]);\r
1474                                         EnableWindow(GetDlgItem(hDlg, FIRE_RESOLV), HideTbl[Num][3]);\r
1475                                         EnableWindow(GetDlgItem(hDlg, FIRE_LOWER), HideTbl[Num][4]);\r
1476                                         EnableWindow(GetDlgItem(hDlg, FIRE_DELIMIT), HideTbl[Num][5]);\r
1477                                         break;\r
1478                         }\r
1479                         return(TRUE);\r
1480         }\r
1481     return(FALSE);\r
1482 }\r
1483 \r
1484 \r
1485 /*----- ツール設定ウインドウのコールバック ------------------------------------\r
1486 *\r
1487 *       Parameter\r
1488 *               HWND hDlg : ウインドウハンドル\r
1489 *               UINT message : メッセージ番号\r
1490 *               WPARAM wParam : メッセージの WPARAM 引数\r
1491 *               LPARAM lParam : メッセージの LPARAM 引数\r
1492 *\r
1493 *       Return Value\r
1494 *               BOOL TRUE/FALSE\r
1495 *----------------------------------------------------------------------------*/\r
1496 \r
1497 // 64ビット対応\r
1498 //static BOOL CALLBACK ToolSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1499 static INT_PTR CALLBACK ToolSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1500 {\r
1501         NMHDR *pnmhdr;\r
1502         char Tmp[FMAX_PATH+1];\r
1503 \r
1504         switch (message)\r
1505         {\r
1506                 case WM_INITDIALOG :\r
1507                         SendDlgItemMessage(hDlg, TOOL_EDITOR1, EM_LIMITTEXT, FMAX_PATH, 0);\r
1508                         SendDlgItemMessage(hDlg, TOOL_EDITOR2, EM_LIMITTEXT, FMAX_PATH, 0);\r
1509                         SendDlgItemMessage(hDlg, TOOL_EDITOR3, EM_LIMITTEXT, FMAX_PATH, 0);\r
1510                         SendDlgItemMessage(hDlg, TOOL_EDITOR1, WM_SETTEXT, 0, (LPARAM)ViewerName[0]);\r
1511                         SendDlgItemMessage(hDlg, TOOL_EDITOR2, WM_SETTEXT, 0, (LPARAM)ViewerName[1]);\r
1512                         SendDlgItemMessage(hDlg, TOOL_EDITOR3, WM_SETTEXT, 0, (LPARAM)ViewerName[2]);\r
1513                     return(TRUE);\r
1514 \r
1515                 case WM_NOTIFY:\r
1516                         pnmhdr = (NMHDR FAR *)lParam;\r
1517                         switch(pnmhdr->code)\r
1518                         {\r
1519                                 case PSN_APPLY :\r
1520                                         SendDlgItemMessage(hDlg, TOOL_EDITOR1, WM_GETTEXT, FMAX_PATH+1, (LPARAM)ViewerName[0]);\r
1521                                         SendDlgItemMessage(hDlg, TOOL_EDITOR2, WM_GETTEXT, FMAX_PATH+1, (LPARAM)ViewerName[1]);\r
1522                                         SendDlgItemMessage(hDlg, TOOL_EDITOR3, WM_GETTEXT, FMAX_PATH+1, (LPARAM)ViewerName[2]);\r
1523                                         break;\r
1524 \r
1525                                 case PSN_RESET :\r
1526                                         break;\r
1527 \r
1528                                 case PSN_HELP :\r
1529                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000050);\r
1530                                         break;\r
1531                         }\r
1532                         break;\r
1533 \r
1534                 case WM_COMMAND :\r
1535                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1536                         {\r
1537                                 case TOOL_EDITOR1_BR :\r
1538                                 case TOOL_EDITOR2_BR :\r
1539                                 case TOOL_EDITOR3_BR :\r
1540                                         strcpy(Tmp, "");\r
1541                                         if(SelectFile(hDlg, Tmp, MSGJPN217, MSGJPN218, NULL, OFN_FILEMUSTEXIST, 0) == TRUE)\r
1542                                         {\r
1543                                                 switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1544                                                 {\r
1545                                                         case TOOL_EDITOR1_BR :\r
1546                                                                 SendDlgItemMessage(hDlg, TOOL_EDITOR1, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1547                                                                 break;\r
1548 \r
1549                                                         case TOOL_EDITOR2_BR :\r
1550                                                                 SendDlgItemMessage(hDlg, TOOL_EDITOR2, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1551                                                                 break;\r
1552 \r
1553                                                         case TOOL_EDITOR3_BR :\r
1554                                                                 SendDlgItemMessage(hDlg, TOOL_EDITOR3, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1555                                                                 break;\r
1556                                                 }\r
1557                                         }\r
1558                                         break;\r
1559                         }\r
1560                         return(TRUE);\r
1561         }\r
1562     return(FALSE);\r
1563 }\r
1564 \r
1565 \r
1566 /*----- サウンド設定ウインドウのコールバック ----------------------------------\r
1567 *\r
1568 *       Parameter\r
1569 *               HWND hDlg : ウインドウハンドル\r
1570 *               UINT message : メッセージ番号\r
1571 *               WPARAM wParam : メッセージの WPARAM 引数\r
1572 *               LPARAM lParam : メッセージの LPARAM 引数\r
1573 *\r
1574 *       Return Value\r
1575 *               BOOL TRUE/FALSE\r
1576 *----------------------------------------------------------------------------*/\r
1577 \r
1578 // 64ビット対応\r
1579 //static BOOL CALLBACK SoundSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1580 static INT_PTR CALLBACK SoundSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1581 {\r
1582         NMHDR *pnmhdr;\r
1583         char Tmp[FMAX_PATH+1];\r
1584 \r
1585         switch (message)\r
1586         {\r
1587                 case WM_INITDIALOG :\r
1588                         SendDlgItemMessage(hDlg, SOUND_CONNECT, BM_SETCHECK, Sound[SND_CONNECT].On, 0);\r
1589                         SendDlgItemMessage(hDlg, SOUND_TRANS, BM_SETCHECK, Sound[SND_TRANS].On, 0);\r
1590                         SendDlgItemMessage(hDlg, SOUND_ERROR, BM_SETCHECK, Sound[SND_ERROR].On, 0);\r
1591 \r
1592                         SendDlgItemMessage(hDlg, SOUND_CONNECT_WAV, EM_LIMITTEXT, (WPARAM)FMAX_PATH, 0);\r
1593                         SendDlgItemMessage(hDlg, SOUND_TRANS_WAV, EM_LIMITTEXT, (WPARAM)FMAX_PATH, 0);\r
1594                         SendDlgItemMessage(hDlg, SOUND_ERROR_WAV, EM_LIMITTEXT, (WPARAM)FMAX_PATH, 0);\r
1595                         SendDlgItemMessage(hDlg, SOUND_CONNECT_WAV, WM_SETTEXT, 0, (LPARAM)Sound[SND_CONNECT].Fname);\r
1596                         SendDlgItemMessage(hDlg, SOUND_TRANS_WAV, WM_SETTEXT, 0, (LPARAM)Sound[SND_TRANS].Fname);\r
1597                         SendDlgItemMessage(hDlg, SOUND_ERROR_WAV, WM_SETTEXT, 0, (LPARAM)Sound[SND_ERROR].Fname);\r
1598                     return(TRUE);\r
1599 \r
1600                 case WM_NOTIFY:\r
1601                         pnmhdr = (NMHDR FAR *)lParam;\r
1602                         switch(pnmhdr->code)\r
1603                         {\r
1604                                 case PSN_APPLY :\r
1605                                         Sound[SND_CONNECT].On = SendDlgItemMessage(hDlg, SOUND_CONNECT, BM_GETCHECK, 0, 0);\r
1606                                         Sound[SND_TRANS].On = SendDlgItemMessage(hDlg, SOUND_TRANS, BM_GETCHECK, 0, 0);\r
1607                                         Sound[SND_ERROR].On = SendDlgItemMessage(hDlg, SOUND_ERROR, BM_GETCHECK, 0, 0);\r
1608                                         SendDlgItemMessage(hDlg, SOUND_CONNECT_WAV, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Sound[SND_CONNECT].Fname);\r
1609                                         SendDlgItemMessage(hDlg, SOUND_TRANS_WAV, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Sound[SND_TRANS].Fname);\r
1610                                         SendDlgItemMessage(hDlg, SOUND_ERROR_WAV, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Sound[SND_ERROR].Fname);\r
1611                                         break;\r
1612 \r
1613                                 case PSN_RESET :\r
1614                                         break;\r
1615 \r
1616                                 case PSN_HELP :\r
1617                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000051);\r
1618                                         break;\r
1619                         }\r
1620                         break;\r
1621 \r
1622                 case WM_COMMAND :\r
1623                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1624                         {\r
1625                                 case SOUND_CONNECT_BR :\r
1626                                 case SOUND_TRANS_BR :\r
1627                                 case SOUND_ERROR_BR :\r
1628                                         strcpy(Tmp, "");\r
1629                                         if(SelectFile(hDlg, Tmp, MSGJPN219, MSGJPN277, NULL, OFN_FILEMUSTEXIST, 0) == TRUE)\r
1630                                         {\r
1631                                                 switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1632                                                 {\r
1633                                                         case SOUND_CONNECT_BR :\r
1634                                                                 SendDlgItemMessage(hDlg, SOUND_CONNECT_WAV, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1635                                                                 break;\r
1636 \r
1637                                                         case SOUND_TRANS_BR :\r
1638                                                                 SendDlgItemMessage(hDlg, SOUND_TRANS_WAV, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1639                                                                 break;\r
1640 \r
1641                                                         case SOUND_ERROR_BR :\r
1642                                                                 SendDlgItemMessage(hDlg, SOUND_ERROR_WAV, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1643                                                                 break;\r
1644                                                 }\r
1645                                         }\r
1646                                         break;\r
1647 \r
1648                                 case SOUND_CONNECT_TEST :\r
1649                                         SendDlgItemMessage(hDlg, SOUND_CONNECT_WAV, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Tmp);\r
1650                                         sndPlaySound(Tmp, SND_ASYNC | SND_NODEFAULT);\r
1651                                         break;\r
1652 \r
1653                                 case SOUND_TRANS_TEST :\r
1654                                         SendDlgItemMessage(hDlg, SOUND_TRANS_WAV, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Tmp);\r
1655                                         sndPlaySound(Tmp, SND_ASYNC | SND_NODEFAULT);\r
1656                                         break;\r
1657 \r
1658                                 case SOUND_ERROR_TEST :\r
1659                                         SendDlgItemMessage(hDlg, SOUND_ERROR_WAV, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Tmp);\r
1660                                         sndPlaySound(Tmp, SND_ASYNC | SND_NODEFAULT);\r
1661                                         break;\r
1662                         }\r
1663                         return(TRUE);\r
1664         }\r
1665     return(FALSE);\r
1666 }\r
1667 \r
1668 \r
1669 /*----- その他の設定ウインドウのコールバック ----------------------------------\r
1670 *\r
1671 *       Parameter\r
1672 *               HWND hDlg : ウインドウハンドル\r
1673 *               UINT message : メッセージ番号\r
1674 *               WPARAM wParam : メッセージの WPARAM 引数\r
1675 *               LPARAM lParam : メッセージの LPARAM 引数\r
1676 *\r
1677 *       Return Value\r
1678 *               BOOL TRUE/FALSE\r
1679 *----------------------------------------------------------------------------*/\r
1680 \r
1681 // 64ビット対応\r
1682 //static BOOL CALLBACK MiscSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1683 static INT_PTR CALLBACK MiscSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1684 {\r
1685         NMHDR *pnmhdr;\r
1686         char Tmp[FMAX_PATH+1];\r
1687 \r
1688         switch (message)\r
1689         {\r
1690                 case WM_INITDIALOG :\r
1691                         SendDlgItemMessage(hDlg, MISC_WINPOS, BM_SETCHECK, SaveWinPos, 0);\r
1692                         SendDlgItemMessage(hDlg, MISC_DEBUG, BM_SETCHECK, DebugConsole, 0);\r
1693                         SendDlgItemMessage(hDlg, MISC_REGTYPE, BM_SETCHECK, RegType, 0);\r
1694                         // ポータブル版判定\r
1695                         if(AskForceIni() == YES)\r
1696                                 EnableWindow(GetDlgItem(hDlg, MISC_REGTYPE), FALSE);\r
1697                         // 全設定暗号化対応\r
1698                         SendDlgItemMessage(hDlg, MISC_ENCRYPT_SETTINGS, BM_SETCHECK, EncryptAllSettings, 0);\r
1699 \r
1700                         SendDlgItemMessage(hDlg, MISC_CACHE_SAVE, BM_SETCHECK, CacheSave, 0);\r
1701                         SendDlgItemMessage(hDlg, MISC_BUFNUM, EM_LIMITTEXT, (WPARAM)2, 0);\r
1702                         SetDecimalText(hDlg, MISC_BUFNUM, abs(CacheEntry));\r
1703                         SendDlgItemMessage(hDlg, MISC_BUFNUM_SPIN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(99, 1));\r
1704                         if(CacheEntry > 0)\r
1705                         {\r
1706                                 SendDlgItemMessage(hDlg, MISC_CACHE, BM_SETCHECK, 1, 0);\r
1707                                 EnableWindow(GetDlgItem(hDlg, MISC_BUFNUM), TRUE);\r
1708                                 EnableWindow(GetDlgItem(hDlg, MISC_CACHE_SAVE), TRUE);\r
1709                         }\r
1710                         else\r
1711                         {\r
1712                                 SendDlgItemMessage(hDlg, MISC_CACHE, BM_SETCHECK, 0, 0);\r
1713                                 EnableWindow(GetDlgItem(hDlg, MISC_BUFNUM), FALSE);\r
1714                                 EnableWindow(GetDlgItem(hDlg, MISC_CACHE_SAVE), FALSE);\r
1715                         }\r
1716 \r
1717                         SendDlgItemMessage(hDlg, MISC_CACHEDIR, EM_LIMITTEXT, (WPARAM)FMAX_PATH, 0);\r
1718                         SendDlgItemMessage(hDlg, MISC_CACHEDIR, WM_SETTEXT, 0, (LPARAM)TmpPath);\r
1719                     return(TRUE);\r
1720 \r
1721                 case WM_NOTIFY:\r
1722                         pnmhdr = (NMHDR FAR *)lParam;\r
1723                         switch(pnmhdr->code)\r
1724                         {\r
1725                                 case PSN_APPLY :\r
1726                                         SaveWinPos = SendDlgItemMessage(hDlg, MISC_WINPOS, BM_GETCHECK, 0, 0);\r
1727                                         DebugConsole = SendDlgItemMessage(hDlg, MISC_DEBUG, BM_GETCHECK, 0, 0);\r
1728                                         // ポータブル版判定\r
1729 //                                      RegType = SendDlgItemMessage(hDlg, MISC_REGTYPE, BM_GETCHECK, 0, 0);\r
1730                                         if(AskForceIni() == NO)\r
1731                                                 RegType = SendDlgItemMessage(hDlg, MISC_REGTYPE, BM_GETCHECK, 0, 0);\r
1732                                         // 全設定暗号化対応\r
1733                                         EncryptAllSettings = SendDlgItemMessage(hDlg, MISC_ENCRYPT_SETTINGS, BM_GETCHECK, 0, 0);\r
1734 \r
1735                                         CacheSave = SendDlgItemMessage(hDlg, MISC_CACHE_SAVE, BM_GETCHECK, 0, 0);\r
1736                                         CacheEntry = GetDecimalText(hDlg, MISC_BUFNUM);\r
1737                                         if(SendDlgItemMessage(hDlg, MISC_CACHE, BM_GETCHECK, 0, 0) == 0)\r
1738                                                 CacheEntry = -CacheEntry;\r
1739 \r
1740                                         SendDlgItemMessage(hDlg, MISC_CACHEDIR, WM_GETTEXT, FMAX_PATH+1, (LPARAM)TmpPath);\r
1741                                         break;\r
1742 \r
1743                                 case PSN_RESET :\r
1744                                         break;\r
1745 \r
1746                                 case PSN_HELP :\r
1747                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000052);\r
1748                                         break;\r
1749                         }\r
1750                         break;\r
1751 \r
1752                 case WM_COMMAND :\r
1753                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1754                         {\r
1755                                 case MISC_CACHE :\r
1756                                         if(SendDlgItemMessage(hDlg, MISC_CACHE, BM_GETCHECK, 0, 0) == 1)\r
1757                                         {\r
1758                                                 EnableWindow(GetDlgItem(hDlg, TRMODE_EXT), TRUE);\r
1759                                                 EnableWindow(GetDlgItem(hDlg, MISC_CACHE_SAVE), TRUE);\r
1760                                         }\r
1761                                         else\r
1762                                         {\r
1763                                                 EnableWindow(GetDlgItem(hDlg, TRMODE_EXT), FALSE);\r
1764                                                 EnableWindow(GetDlgItem(hDlg, MISC_CACHE_SAVE), FALSE);\r
1765                                         }\r
1766                                         break;\r
1767 \r
1768                                 case MISC_CACHEDIR_BR :\r
1769                                         if(SelectDir(hDlg, Tmp, FMAX_PATH) == TRUE)\r
1770                                                 SendDlgItemMessage(hDlg, MISC_CACHEDIR, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1771                                         break;\r
1772 \r
1773                                 case MISC_CACHEDIR_DEF :\r
1774                                         // 環境依存の不具合対策\r
1775 //                                      GetTempPath(FMAX_PATH, Tmp);\r
1776                                         GetAppTempPath(Tmp);\r
1777                                         SetYenTail(Tmp);\r
1778                                         SendDlgItemMessage(hDlg, MISC_CACHEDIR, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1779                                         break;\r
1780                         }\r
1781                         return(TRUE);\r
1782         }\r
1783     return(FALSE);\r
1784 }\r
1785 \r
1786 \r
1787 /*----- ソート設定ウインドウ --------------------------------------------------\r
1788 *\r
1789 *       Parameter\r
1790 *               なし\r
1791 *\r
1792 *       Return Value\r
1793 *               int ステータス (YES=実行/NO=取消)\r
1794 *----------------------------------------------------------------------------*/\r
1795 \r
1796 int SortSetting(void)\r
1797 {\r
1798         int Sts;\r
1799 \r
1800         Sts = DialogBox(GetFtpInst(), MAKEINTRESOURCE(sort_dlg), GetMainHwnd(), SortSettingProc);\r
1801         return(Sts);\r
1802 }\r
1803 \r
1804 \r
1805 /*----- ソート設定ウインドウのコールバック ------------------------------------\r
1806 *\r
1807 *       Parameter\r
1808 *               HWND hDlg : ウインドウハンドル\r
1809 *               UINT message : メッセージ番号\r
1810 *               WPARAM wParam : メッセージの WPARAM 引数\r
1811 *               LPARAM lParam : メッセージの LPARAM 引数\r
1812 *\r
1813 *       Return Value\r
1814 *               BOOL TRUE/FALSE\r
1815 *----------------------------------------------------------------------------*/\r
1816 \r
1817 // 64ビット対応\r
1818 //static BOOL CALLBACK SortSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1819 static INT_PTR CALLBACK SortSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1820 {\r
1821         int LFsort;\r
1822         int LDsort;\r
1823         int RFsort;\r
1824         int RDsort;\r
1825 \r
1826         static const RADIOBUTTON LsortOrdButton[] = {\r
1827                 { SORT_LFILE_NAME, SORT_NAME },\r
1828                 { SORT_LFILE_EXT, SORT_EXT },\r
1829                 { SORT_LFILE_SIZE, SORT_SIZE },\r
1830                 { SORT_LFILE_DATE, SORT_DATE }\r
1831         };\r
1832         #define LSORTORDBUTTONS (sizeof(LsortOrdButton)/sizeof(RADIOBUTTON))\r
1833 \r
1834         static const RADIOBUTTON LDirsortOrdButton[] = {\r
1835                 { SORT_LDIR_NAME, SORT_NAME },\r
1836                 { SORT_LDIR_DATE, SORT_DATE }\r
1837         };\r
1838         #define LDIRSORTORDBUTTONS      (sizeof(LDirsortOrdButton)/sizeof(RADIOBUTTON))\r
1839 \r
1840         static const RADIOBUTTON RsortOrdButton[] = {\r
1841                 { SORT_RFILE_NAME, SORT_NAME },\r
1842                 { SORT_RFILE_EXT, SORT_EXT },\r
1843                 { SORT_RFILE_SIZE, SORT_SIZE },\r
1844                 { SORT_RFILE_DATE, SORT_DATE }\r
1845         };\r
1846         #define RSORTORDBUTTONS (sizeof(RsortOrdButton)/sizeof(RADIOBUTTON))\r
1847 \r
1848         static const RADIOBUTTON RDirsortOrdButton[] = {\r
1849                 { SORT_RDIR_NAME, SORT_NAME },\r
1850                 { SORT_RDIR_DATE, SORT_DATE }\r
1851         };\r
1852         #define RDIRSORTORDBUTTONS      (sizeof(RDirsortOrdButton)/sizeof(RADIOBUTTON))\r
1853 \r
1854         switch (message)\r
1855         {\r
1856                 case WM_INITDIALOG :\r
1857 \r
1858                         SetRadioButtonByValue(hDlg, AskSortType(ITEM_LFILE) & SORT_MASK_ORD, LsortOrdButton, LSORTORDBUTTONS);\r
1859 \r
1860                         if((AskSortType(ITEM_LFILE) & SORT_GET_ORD) == SORT_ASCENT)\r
1861                                 SendDlgItemMessage(hDlg, SORT_LFILE_REV, BM_SETCHECK, 0, 0);\r
1862                         else\r
1863                                 SendDlgItemMessage(hDlg, SORT_LFILE_REV, BM_SETCHECK, 1, 0);\r
1864 \r
1865                         SetRadioButtonByValue(hDlg, AskSortType(ITEM_LDIR) & SORT_MASK_ORD, LDirsortOrdButton, LDIRSORTORDBUTTONS);\r
1866 \r
1867                         if((AskSortType(ITEM_LDIR) & SORT_GET_ORD) == SORT_ASCENT)\r
1868                                 SendDlgItemMessage(hDlg, SORT_LDIR_REV, BM_SETCHECK, 0, 0);\r
1869                         else\r
1870                                 SendDlgItemMessage(hDlg, SORT_LDIR_REV, BM_SETCHECK, 1, 0);\r
1871 \r
1872                         SetRadioButtonByValue(hDlg, AskSortType(ITEM_RFILE) & SORT_MASK_ORD, RsortOrdButton, RSORTORDBUTTONS);\r
1873 \r
1874                         if((AskSortType(ITEM_RFILE) & SORT_GET_ORD) == SORT_ASCENT)\r
1875                                 SendDlgItemMessage(hDlg, SORT_RFILE_REV, BM_SETCHECK, 0, 0);\r
1876                         else\r
1877                                 SendDlgItemMessage(hDlg, SORT_RFILE_REV, BM_SETCHECK, 1, 0);\r
1878 \r
1879                         SetRadioButtonByValue(hDlg, AskSortType(ITEM_RDIR) & SORT_MASK_ORD, RDirsortOrdButton, RDIRSORTORDBUTTONS);\r
1880 \r
1881                         if((AskSortType(ITEM_RDIR) & SORT_GET_ORD) == SORT_ASCENT)\r
1882                                 SendDlgItemMessage(hDlg, SORT_RDIR_REV, BM_SETCHECK, 0, 0);\r
1883                         else\r
1884                                 SendDlgItemMessage(hDlg, SORT_RDIR_REV, BM_SETCHECK, 1, 0);\r
1885 \r
1886                         SendDlgItemMessage(hDlg, SORT_SAVEHOST, BM_SETCHECK, AskSaveSortToHost(), 0);\r
1887 \r
1888                     return(TRUE);\r
1889 \r
1890                 case WM_COMMAND :\r
1891                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1892                         {\r
1893                                 case IDOK :\r
1894                                         LFsort = AskRadioButtonValue(hDlg, LsortOrdButton, LSORTORDBUTTONS);\r
1895 \r
1896                                         if(SendDlgItemMessage(hDlg, SORT_LFILE_REV, BM_GETCHECK, 0, 0) == 1)\r
1897                                                 LFsort |= SORT_DESCENT;\r
1898 \r
1899                                         LDsort = AskRadioButtonValue(hDlg, LDirsortOrdButton, LDIRSORTORDBUTTONS);\r
1900 \r
1901                                         if(SendDlgItemMessage(hDlg, SORT_LDIR_REV, BM_GETCHECK, 0, 0) == 1)\r
1902                                                 LDsort |= SORT_DESCENT;\r
1903 \r
1904                                         RFsort = AskRadioButtonValue(hDlg, RsortOrdButton, RSORTORDBUTTONS);\r
1905 \r
1906                                         if(SendDlgItemMessage(hDlg, SORT_RFILE_REV, BM_GETCHECK, 0, 0) == 1)\r
1907                                                 RFsort |= SORT_DESCENT;\r
1908 \r
1909                                         RDsort = AskRadioButtonValue(hDlg, RDirsortOrdButton, RDIRSORTORDBUTTONS);\r
1910 \r
1911                                         if(SendDlgItemMessage(hDlg, SORT_RDIR_REV, BM_GETCHECK, 0, 0) == 1)\r
1912                                                 RDsort |= SORT_DESCENT;\r
1913 \r
1914                                         SetSortTypeImm(LFsort, LDsort, RFsort, RDsort);\r
1915 \r
1916                                         SetSaveSortToHost(SendDlgItemMessage(hDlg, SORT_SAVEHOST, BM_GETCHECK, 0, 0));\r
1917 \r
1918                                         EndDialog(hDlg, YES);\r
1919                                         break;\r
1920 \r
1921                                 case IDCANCEL :\r
1922                                         EndDialog(hDlg, NO);\r
1923                                         break;\r
1924         \r
1925                                 case IDHELP :\r
1926                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000001);\r
1927                                         break;\r
1928                 }\r
1929                         return(TRUE);\r
1930         }\r
1931     return(FALSE);\r
1932 }\r
1933 \r
1934 \r
1935 /*----- ダイアログのコントロールから10進数を取得 ----------------------------\r
1936 *\r
1937 *       Parameter\r
1938 *               HWND hDlg : ウインドウハンドル\r
1939 *               int Ctrl : コントロールのID\r
1940 *\r
1941 *       Return Value\r
1942 *               なし\r
1943 *----------------------------------------------------------------------------*/\r
1944 \r
1945 // hostman.cで使用\r
1946 //static int GetDecimalText(HWND hDlg, int Ctrl)\r
1947 int GetDecimalText(HWND hDlg, int Ctrl)\r
1948 {\r
1949         char Tmp[40];\r
1950 \r
1951         SendDlgItemMessage(hDlg, Ctrl, WM_GETTEXT, (WPARAM)39, (LPARAM)Tmp);\r
1952         return(atoi(Tmp));\r
1953 }\r
1954 \r
1955 \r
1956 /*----- ダイアログのコントロールに10進数をセット ----------------------------\r
1957 *\r
1958 *       Parameter\r
1959 *               HWND hDlg : ウインドウハンドル\r
1960 *               int Ctrl : コントロールのID\r
1961 *               int Num : 数値\r
1962 *\r
1963 *       Return Value\r
1964 *               なし\r
1965 *----------------------------------------------------------------------------*/\r
1966 \r
1967 // hostman.cで使用\r
1968 //static void SetDecimalText(HWND hDlg, int Ctrl, int Num)\r
1969 void SetDecimalText(HWND hDlg, int Ctrl, int Num)\r
1970 {\r
1971         char Tmp[40];\r
1972 \r
1973         sprintf(Tmp, "%d", Num);\r
1974         SendDlgItemMessage(hDlg, Ctrl, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1975         return;\r
1976 }\r
1977 \r
1978 \r
1979 /*----- 設定値の範囲チェック --------------------------------------------------\r
1980 *\r
1981 *       Parameter\r
1982 *               int *Cur : 設定値\r
1983 *               int Max : 最大値\r
1984 *               int Min : 最小値\r
1985 *\r
1986 *       Return Value\r
1987 *               なし\r
1988 *\r
1989 *       Parameter change\r
1990 *               int *Cur : 設定値\r
1991 *----------------------------------------------------------------------------*/\r
1992 \r
1993 // hostman.cで使用\r
1994 //static void CheckRange2(int *Cur, int Max, int Min)\r
1995 void CheckRange2(int *Cur, int Max, int Min)\r
1996 {\r
1997         if(*Cur < Min)\r
1998                 *Cur = Min;\r
1999         if(*Cur > Max)\r
2000                 *Cur = Max;\r
2001         return;\r
2002 }\r
2003 \r
2004 \r
2005 /*----- 文字列をリストボックスに追加 ------------------------------------------\r
2006 *\r
2007 *       Parameter\r
2008 *               HWND hDlg : ダイアログボックスのウインドウハンドル\r
2009 *               char *Str : 文字列\r
2010 *               int CtrlList : リストボックスのID\r
2011 *               int BufSize : バッファサイズ\r
2012 *\r
2013 *       Return Value\r
2014 *               なし\r
2015 *----------------------------------------------------------------------------*/\r
2016 \r
2017 // hostman.cで使用\r
2018 //static void AddTextToListBox(HWND hDlg, char *Str, int CtrlList, int BufSize)\r
2019 void AddTextToListBox(HWND hDlg, char *Str, int CtrlList, int BufSize)\r
2020 {\r
2021         char Tmp[FMAX_PATH+1];\r
2022         int Num;\r
2023         int i;\r
2024         int Len;\r
2025 \r
2026         Len = strlen(Str);\r
2027         if(Len > 0)\r
2028         {\r
2029                 Len++;\r
2030                 Num = SendDlgItemMessage(hDlg, CtrlList, LB_GETCOUNT, 0, 0);\r
2031                 for(i = 0; i < Num; i++)\r
2032                 {\r
2033                         SendDlgItemMessage(hDlg, CtrlList, LB_GETTEXT, i, (LPARAM)Tmp);\r
2034                         Len += strlen(Tmp) + 1;\r
2035                 }\r
2036 \r
2037                 if(Len > (BufSize-1))\r
2038                         MessageBeep(-1);\r
2039                 else\r
2040                         SendDlgItemMessage(hDlg, CtrlList, LB_ADDSTRING, 0, (LPARAM)Str);\r
2041         }\r
2042         return;\r
2043 }\r
2044 \r
2045 \r
2046 /*----- マルチ文字列をリストボックスにセット ----------------------------------\r
2047 *\r
2048 *       Parameter\r
2049 *               HWND hDlg : ダイアログボックスのウインドウハンドル\r
2050 *               int CtrlList : リストボックスのID\r
2051 *               char *Text : 文字列\r
2052 *\r
2053 *       Return Value\r
2054 *               なし\r
2055 *----------------------------------------------------------------------------*/\r
2056 \r
2057 // hostman.cで使用\r
2058 //static void SetMultiTextToList(HWND hDlg, int CtrlList, char *Text)\r
2059 void SetMultiTextToList(HWND hDlg, int CtrlList, char *Text)\r
2060 {\r
2061         char *Pos;\r
2062 \r
2063         Pos = Text;\r
2064         while(*Pos != NUL)\r
2065         {\r
2066                 SendDlgItemMessage(hDlg, CtrlList, LB_ADDSTRING, 0, (LPARAM)Pos);\r
2067                 Pos += strlen(Pos) + 1;\r
2068         }\r
2069         return;\r
2070 }\r
2071 \r
2072 \r
2073 /*----- リストボックスの内容をマルチ文字列にする ------------------------------\r
2074 *\r
2075 *       Parameter\r
2076 *               HWND hDlg : ダイアログボックスのウインドウハンドル\r
2077 *               int CtrlList : リストボックスのID\r
2078 *               char *Buf : 文字列をセットするバッファ\r
2079 *               int BufSize : バッファのサイズ\r
2080 *\r
2081 *       Return Value\r
2082 *               なし\r
2083 *----------------------------------------------------------------------------*/\r
2084 \r
2085 // hostman.cで使用\r
2086 //static void GetMultiTextFromList(HWND hDlg, int CtrlList, char *Buf, int BufSize)\r
2087 void GetMultiTextFromList(HWND hDlg, int CtrlList, char *Buf, int BufSize)\r
2088 {\r
2089         char Tmp[FMAX_PATH+1];\r
2090         int Num;\r
2091         int i;\r
2092 \r
2093         memset(Buf, NUL, BufSize);\r
2094         Num = SendDlgItemMessage(hDlg, CtrlList, LB_GETCOUNT, 0, 0);\r
2095         for(i = 0; i < Num; i++)\r
2096         {\r
2097                 SendDlgItemMessage(hDlg, CtrlList, LB_GETTEXT, i, (LPARAM)Tmp);\r
2098                 strcpy(Buf + StrMultiLen(Buf), Tmp);\r
2099         }\r
2100         return;\r
2101 }\r
2102 \r
2103 \r