OSDN Git Service

Add options for removing old logs.
[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 FwallResolv;\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                         if(IsUPnPLoaded() == YES)\r
1307                                 SendDlgItemMessage(hDlg, CONNECT_UPNP, BM_SETCHECK, UPnPEnabled, 0);\r
1308                         else\r
1309                         {\r
1310                                 SendDlgItemMessage(hDlg, CONNECT_UPNP, BM_SETCHECK, BST_UNCHECKED, 0);\r
1311                                 EnableWindow(GetDlgItem(hDlg, CONNECT_UPNP), FALSE);\r
1312                         }\r
1313                     return(TRUE);\r
1314 \r
1315                 case WM_NOTIFY:\r
1316                         pnmhdr = (NMHDR FAR *)lParam;\r
1317                         switch(pnmhdr->code)\r
1318                         {\r
1319                                 case PSN_APPLY :\r
1320                                         ConnectOnStart = SendDlgItemMessage(hDlg, MISC_CONNECT, BM_GETCHECK, 0, 0);\r
1321                                         ConnectAndSet = SendDlgItemMessage(hDlg, MISC_OLDDLG, BM_GETCHECK, 0, 0);\r
1322                                         RasClose = SendDlgItemMessage(hDlg, CONNECT_RASCLOSE, BM_GETCHECK, 0, 0);\r
1323                                         RasCloseNotify = SendDlgItemMessage(hDlg, CONNECT_CLOSE_NOTIFY, BM_GETCHECK, 0, 0);\r
1324                                         FileHist = GetDecimalText(hDlg, CONNECT_HIST);\r
1325                                         CheckRange2(&FileHist, HISTORY_MAX, 0);\r
1326                                         QuickAnonymous = SendDlgItemMessage(hDlg, CONNECT_QUICK_ANONY, BM_GETCHECK, 0, 0);\r
1327                                         PassToHist = SendDlgItemMessage(hDlg, CONNECT_HIST_PASS, BM_GETCHECK, 0, 0);\r
1328                                         SendQuit = SendDlgItemMessage(hDlg, CONNECT_SENDQUIT, BM_GETCHECK, 0, 0);\r
1329                                         NoRasControl = SendDlgItemMessage(hDlg, CONNECT_NORAS, BM_GETCHECK, 0, 0);\r
1330                                         // UPnP対応\r
1331                                         if(IsUPnPLoaded() == YES)\r
1332                                                 UPnPEnabled = SendDlgItemMessage(hDlg, CONNECT_UPNP, BM_GETCHECK, 0, 0);\r
1333                                         break;\r
1334 \r
1335                                 case PSN_RESET :\r
1336                                         break;\r
1337 \r
1338                                 case PSN_HELP :\r
1339                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000048);\r
1340                                         break;\r
1341                         }\r
1342                         break;\r
1343 \r
1344                 case WM_COMMAND :\r
1345                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1346                         {\r
1347                                 case CONNECT_RASCLOSE :\r
1348                                         if(SendDlgItemMessage(hDlg, CONNECT_RASCLOSE, BM_GETCHECK, 0, 0) == 1)\r
1349                                                 EnableWindow(GetDlgItem(hDlg, CONNECT_CLOSE_NOTIFY), TRUE);\r
1350                                         else\r
1351                                                 EnableWindow(GetDlgItem(hDlg, CONNECT_CLOSE_NOTIFY), FALSE);\r
1352                                         break;\r
1353                         }\r
1354                         return(TRUE);\r
1355         }\r
1356     return(FALSE);\r
1357 }\r
1358 \r
1359 \r
1360 /*----- FireWall設定ウインドウのコールバック ----------------------------------\r
1361 *\r
1362 *       Parameter\r
1363 *               HWND hDlg : ウインドウハンドル\r
1364 *               UINT message : メッセージ番号\r
1365 *               WPARAM wParam : メッセージの WPARAM 引数\r
1366 *               LPARAM lParam : メッセージの LPARAM 引数\r
1367 *\r
1368 *       Return Value\r
1369 *               BOOL TRUE/FALSE\r
1370 *----------------------------------------------------------------------------*/\r
1371 \r
1372 // 64ビット対応\r
1373 //static BOOL CALLBACK FireSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1374 static INT_PTR CALLBACK FireSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1375 {\r
1376         NMHDR *pnmhdr;\r
1377         char Tmp[10];\r
1378         int Num;\r
1379         static int Type;\r
1380         static const INTCONVTBL TypeTbl[] = {\r
1381                 { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 8 }, \r
1382                 { 4, 3 }, { 5, 4 }, { 6, 5 }, { 7, 6 }, \r
1383                 { 8, 7 }, { 9, 9 }\r
1384         };\r
1385 \r
1386         static const int HideTbl[9][6] = {\r
1387                 { TRUE,  TRUE,  TRUE,  FALSE, TRUE,  FALSE },\r
1388                 { TRUE,  TRUE,  TRUE,  FALSE, FALSE, TRUE  },\r
1389                 { TRUE,  TRUE,  TRUE,  FALSE, FALSE, FALSE },\r
1390                 { FALSE, FALSE, FALSE, FALSE, FALSE, TRUE  },\r
1391                 { FALSE, FALSE, FALSE, FALSE, TRUE,  FALSE },\r
1392                 { TRUE,  FALSE, FALSE, FALSE, FALSE, FALSE },\r
1393                 { FALSE, FALSE, FALSE, TRUE,  FALSE, FALSE },\r
1394                 { TRUE,  TRUE,  FALSE, TRUE,  FALSE, FALSE },\r
1395                 { TRUE,  TRUE,  FALSE, FALSE, TRUE,  TRUE  }\r
1396         };\r
1397 \r
1398         switch (message)\r
1399         {\r
1400                 case WM_INITDIALOG :\r
1401                         // プロセス保護\r
1402                         ProtectAllEditControls(hDlg);\r
1403                         Type = ConvertNum(FwallType, 1, TypeTbl, sizeof(TypeTbl)/sizeof(INTCONVTBL));\r
1404                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN204);\r
1405                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN205);\r
1406                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN206);\r
1407                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN207);\r
1408                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN208);\r
1409                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN209);\r
1410                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN210);\r
1411                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN211);\r
1412                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN294);\r
1413                         SendDlgItemMessage(hDlg, FIRE_TYPE, CB_SETCURSEL, Type-1, 0);\r
1414 \r
1415                         SendDlgItemMessage(hDlg, FIRE_HOST, EM_LIMITTEXT, HOST_ADRS_LEN, 0);\r
1416                         SendDlgItemMessage(hDlg, FIRE_USER, EM_LIMITTEXT, USER_NAME_LEN, 0);\r
1417                         SendDlgItemMessage(hDlg, FIRE_PASS, EM_LIMITTEXT, PASSWORD_LEN, 0);\r
1418                         SendDlgItemMessage(hDlg, FIRE_PORT, EM_LIMITTEXT, 5, 0);\r
1419                         SendDlgItemMessage(hDlg, FIRE_DELIMIT, EM_LIMITTEXT, 1, 0);\r
1420 \r
1421                         SendDlgItemMessage(hDlg, FIRE_HOST, WM_SETTEXT, 0, (LPARAM)FwallHost);\r
1422                         SendDlgItemMessage(hDlg, FIRE_USER, WM_SETTEXT, 0, (LPARAM)FwallUser);\r
1423                         SendDlgItemMessage(hDlg, FIRE_PASS, WM_SETTEXT, 0, (LPARAM)FwallPass);\r
1424                         sprintf(Tmp, "%d", FwallPort);\r
1425                         SendDlgItemMessage(hDlg, FIRE_PORT, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1426                         sprintf(Tmp, "%c", FwallDelimiter);\r
1427                         SendDlgItemMessage(hDlg, FIRE_DELIMIT, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1428 \r
1429                         SendDlgItemMessage(hDlg, FIRE_USEIT, BM_SETCHECK, FwallDefault, 0);\r
1430                         SendDlgItemMessage(hDlg, FIRE_PASV, BM_SETCHECK, PasvDefault, 0);\r
1431                         SendDlgItemMessage(hDlg, FIRE_RESOLV, BM_SETCHECK, FwallResolv, 0);\r
1432                         SendDlgItemMessage(hDlg, FIRE_LOWER, BM_SETCHECK, FwallLower, 0);\r
1433 \r
1434                         SendDlgItemMessage(hDlg, FIRE_SECURITY, CB_ADDSTRING, 0, (LPARAM)MSGJPN212);\r
1435                         SendDlgItemMessage(hDlg, FIRE_SECURITY, CB_ADDSTRING, 0, (LPARAM)MSGJPN213);\r
1436                         SendDlgItemMessage(hDlg, FIRE_SECURITY, CB_ADDSTRING, 0, (LPARAM)MSGJPN214);\r
1437                         SendDlgItemMessage(hDlg, FIRE_SECURITY, CB_ADDSTRING, 0, (LPARAM)MSGJPN215);\r
1438                         SendDlgItemMessage(hDlg, FIRE_SECURITY, CB_ADDSTRING, 0, (LPARAM)MSGJPN216);\r
1439                         SendDlgItemMessage(hDlg, FIRE_SECURITY, CB_SETCURSEL, FwallSecurity, 0);\r
1440                     return(TRUE);\r
1441 \r
1442                 case WM_NOTIFY:\r
1443                         pnmhdr = (NMHDR FAR *)lParam;\r
1444                         switch(pnmhdr->code)\r
1445                         {\r
1446                                 case PSN_APPLY :\r
1447                                         Type = SendDlgItemMessage(hDlg, FIRE_TYPE, CB_GETCURSEL, 0, 0) + 1;\r
1448                                         FwallType = ConvertNum(Type, 0, TypeTbl, sizeof(TypeTbl)/sizeof(INTCONVTBL));\r
1449                                         SendDlgItemMessage(hDlg, FIRE_HOST, WM_GETTEXT, HOST_ADRS_LEN+1, (LPARAM)FwallHost);\r
1450                                         SendDlgItemMessage(hDlg, FIRE_USER, WM_GETTEXT, USER_NAME_LEN+1, (LPARAM)FwallUser);\r
1451                                         SendDlgItemMessage(hDlg, FIRE_PASS, WM_GETTEXT, PASSWORD_LEN, (LPARAM)FwallPass);\r
1452                                         SendDlgItemMessage(hDlg, FIRE_PORT, WM_GETTEXT, 5+1, (LPARAM)Tmp);\r
1453                                         FwallPort = atoi(Tmp);\r
1454                                         SendDlgItemMessage(hDlg, FIRE_DELIMIT, WM_GETTEXT, 5, (LPARAM)Tmp);\r
1455                                         FwallDelimiter = Tmp[0];\r
1456                                         FwallDefault = SendDlgItemMessage(hDlg, FIRE_USEIT, BM_GETCHECK, 0, 0);\r
1457                                         PasvDefault = SendDlgItemMessage(hDlg, FIRE_PASV, BM_GETCHECK, 0, 0);\r
1458                                         FwallResolv = SendDlgItemMessage(hDlg, FIRE_RESOLV, BM_GETCHECK, 0, 0);\r
1459                                         FwallLower = SendDlgItemMessage(hDlg, FIRE_LOWER, BM_GETCHECK, 0, 0);\r
1460                                         FwallSecurity = SendDlgItemMessage(hDlg, FIRE_SECURITY, CB_GETCURSEL, 0, 0);\r
1461                                         break;\r
1462 \r
1463                                 case PSN_RESET :\r
1464                                         break;\r
1465 \r
1466                                 case PSN_HELP :\r
1467                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000049);\r
1468                                         break;\r
1469                         }\r
1470                         break;\r
1471 \r
1472                 case WM_COMMAND :\r
1473                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1474                         {\r
1475                                 case FIRE_TYPE :\r
1476                                         Num = SendDlgItemMessage(hDlg, FIRE_TYPE, CB_GETCURSEL, 0, 0);\r
1477                                         EnableWindow(GetDlgItem(hDlg, FIRE_USER), HideTbl[Num][0]);\r
1478                                         EnableWindow(GetDlgItem(hDlg, FIRE_PASS), HideTbl[Num][1]);\r
1479                                         EnableWindow(GetDlgItem(hDlg, FIRE_SECURITY), HideTbl[Num][2]);\r
1480                                         EnableWindow(GetDlgItem(hDlg, FIRE_RESOLV), HideTbl[Num][3]);\r
1481                                         EnableWindow(GetDlgItem(hDlg, FIRE_LOWER), HideTbl[Num][4]);\r
1482                                         EnableWindow(GetDlgItem(hDlg, FIRE_DELIMIT), HideTbl[Num][5]);\r
1483                                         break;\r
1484                         }\r
1485                         return(TRUE);\r
1486         }\r
1487     return(FALSE);\r
1488 }\r
1489 \r
1490 \r
1491 /*----- ツール設定ウインドウのコールバック ------------------------------------\r
1492 *\r
1493 *       Parameter\r
1494 *               HWND hDlg : ウインドウハンドル\r
1495 *               UINT message : メッセージ番号\r
1496 *               WPARAM wParam : メッセージの WPARAM 引数\r
1497 *               LPARAM lParam : メッセージの LPARAM 引数\r
1498 *\r
1499 *       Return Value\r
1500 *               BOOL TRUE/FALSE\r
1501 *----------------------------------------------------------------------------*/\r
1502 \r
1503 // 64ビット対応\r
1504 //static BOOL CALLBACK ToolSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1505 static INT_PTR CALLBACK ToolSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1506 {\r
1507         NMHDR *pnmhdr;\r
1508         char Tmp[FMAX_PATH+1];\r
1509 \r
1510         switch (message)\r
1511         {\r
1512                 case WM_INITDIALOG :\r
1513                         SendDlgItemMessage(hDlg, TOOL_EDITOR1, EM_LIMITTEXT, FMAX_PATH, 0);\r
1514                         SendDlgItemMessage(hDlg, TOOL_EDITOR2, EM_LIMITTEXT, FMAX_PATH, 0);\r
1515                         SendDlgItemMessage(hDlg, TOOL_EDITOR3, EM_LIMITTEXT, FMAX_PATH, 0);\r
1516                         SendDlgItemMessage(hDlg, TOOL_EDITOR1, WM_SETTEXT, 0, (LPARAM)ViewerName[0]);\r
1517                         SendDlgItemMessage(hDlg, TOOL_EDITOR2, WM_SETTEXT, 0, (LPARAM)ViewerName[1]);\r
1518                         SendDlgItemMessage(hDlg, TOOL_EDITOR3, WM_SETTEXT, 0, (LPARAM)ViewerName[2]);\r
1519                     return(TRUE);\r
1520 \r
1521                 case WM_NOTIFY:\r
1522                         pnmhdr = (NMHDR FAR *)lParam;\r
1523                         switch(pnmhdr->code)\r
1524                         {\r
1525                                 case PSN_APPLY :\r
1526                                         SendDlgItemMessage(hDlg, TOOL_EDITOR1, WM_GETTEXT, FMAX_PATH+1, (LPARAM)ViewerName[0]);\r
1527                                         SendDlgItemMessage(hDlg, TOOL_EDITOR2, WM_GETTEXT, FMAX_PATH+1, (LPARAM)ViewerName[1]);\r
1528                                         SendDlgItemMessage(hDlg, TOOL_EDITOR3, WM_GETTEXT, FMAX_PATH+1, (LPARAM)ViewerName[2]);\r
1529                                         break;\r
1530 \r
1531                                 case PSN_RESET :\r
1532                                         break;\r
1533 \r
1534                                 case PSN_HELP :\r
1535                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000050);\r
1536                                         break;\r
1537                         }\r
1538                         break;\r
1539 \r
1540                 case WM_COMMAND :\r
1541                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1542                         {\r
1543                                 case TOOL_EDITOR1_BR :\r
1544                                 case TOOL_EDITOR2_BR :\r
1545                                 case TOOL_EDITOR3_BR :\r
1546                                         strcpy(Tmp, "");\r
1547                                         if(SelectFile(hDlg, Tmp, MSGJPN217, MSGJPN218, NULL, OFN_FILEMUSTEXIST, 0) == TRUE)\r
1548                                         {\r
1549                                                 switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1550                                                 {\r
1551                                                         case TOOL_EDITOR1_BR :\r
1552                                                                 SendDlgItemMessage(hDlg, TOOL_EDITOR1, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1553                                                                 break;\r
1554 \r
1555                                                         case TOOL_EDITOR2_BR :\r
1556                                                                 SendDlgItemMessage(hDlg, TOOL_EDITOR2, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1557                                                                 break;\r
1558 \r
1559                                                         case TOOL_EDITOR3_BR :\r
1560                                                                 SendDlgItemMessage(hDlg, TOOL_EDITOR3, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1561                                                                 break;\r
1562                                                 }\r
1563                                         }\r
1564                                         break;\r
1565                         }\r
1566                         return(TRUE);\r
1567         }\r
1568     return(FALSE);\r
1569 }\r
1570 \r
1571 \r
1572 /*----- サウンド設定ウインドウのコールバック ----------------------------------\r
1573 *\r
1574 *       Parameter\r
1575 *               HWND hDlg : ウインドウハンドル\r
1576 *               UINT message : メッセージ番号\r
1577 *               WPARAM wParam : メッセージの WPARAM 引数\r
1578 *               LPARAM lParam : メッセージの LPARAM 引数\r
1579 *\r
1580 *       Return Value\r
1581 *               BOOL TRUE/FALSE\r
1582 *----------------------------------------------------------------------------*/\r
1583 \r
1584 // 64ビット対応\r
1585 //static BOOL CALLBACK SoundSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1586 static INT_PTR CALLBACK SoundSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1587 {\r
1588         NMHDR *pnmhdr;\r
1589         char Tmp[FMAX_PATH+1];\r
1590 \r
1591         switch (message)\r
1592         {\r
1593                 case WM_INITDIALOG :\r
1594                         SendDlgItemMessage(hDlg, SOUND_CONNECT, BM_SETCHECK, Sound[SND_CONNECT].On, 0);\r
1595                         SendDlgItemMessage(hDlg, SOUND_TRANS, BM_SETCHECK, Sound[SND_TRANS].On, 0);\r
1596                         SendDlgItemMessage(hDlg, SOUND_ERROR, BM_SETCHECK, Sound[SND_ERROR].On, 0);\r
1597 \r
1598                         SendDlgItemMessage(hDlg, SOUND_CONNECT_WAV, EM_LIMITTEXT, (WPARAM)FMAX_PATH, 0);\r
1599                         SendDlgItemMessage(hDlg, SOUND_TRANS_WAV, EM_LIMITTEXT, (WPARAM)FMAX_PATH, 0);\r
1600                         SendDlgItemMessage(hDlg, SOUND_ERROR_WAV, EM_LIMITTEXT, (WPARAM)FMAX_PATH, 0);\r
1601                         SendDlgItemMessage(hDlg, SOUND_CONNECT_WAV, WM_SETTEXT, 0, (LPARAM)Sound[SND_CONNECT].Fname);\r
1602                         SendDlgItemMessage(hDlg, SOUND_TRANS_WAV, WM_SETTEXT, 0, (LPARAM)Sound[SND_TRANS].Fname);\r
1603                         SendDlgItemMessage(hDlg, SOUND_ERROR_WAV, WM_SETTEXT, 0, (LPARAM)Sound[SND_ERROR].Fname);\r
1604                     return(TRUE);\r
1605 \r
1606                 case WM_NOTIFY:\r
1607                         pnmhdr = (NMHDR FAR *)lParam;\r
1608                         switch(pnmhdr->code)\r
1609                         {\r
1610                                 case PSN_APPLY :\r
1611                                         Sound[SND_CONNECT].On = SendDlgItemMessage(hDlg, SOUND_CONNECT, BM_GETCHECK, 0, 0);\r
1612                                         Sound[SND_TRANS].On = SendDlgItemMessage(hDlg, SOUND_TRANS, BM_GETCHECK, 0, 0);\r
1613                                         Sound[SND_ERROR].On = SendDlgItemMessage(hDlg, SOUND_ERROR, BM_GETCHECK, 0, 0);\r
1614                                         SendDlgItemMessage(hDlg, SOUND_CONNECT_WAV, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Sound[SND_CONNECT].Fname);\r
1615                                         SendDlgItemMessage(hDlg, SOUND_TRANS_WAV, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Sound[SND_TRANS].Fname);\r
1616                                         SendDlgItemMessage(hDlg, SOUND_ERROR_WAV, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Sound[SND_ERROR].Fname);\r
1617                                         break;\r
1618 \r
1619                                 case PSN_RESET :\r
1620                                         break;\r
1621 \r
1622                                 case PSN_HELP :\r
1623                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000051);\r
1624                                         break;\r
1625                         }\r
1626                         break;\r
1627 \r
1628                 case WM_COMMAND :\r
1629                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1630                         {\r
1631                                 case SOUND_CONNECT_BR :\r
1632                                 case SOUND_TRANS_BR :\r
1633                                 case SOUND_ERROR_BR :\r
1634                                         strcpy(Tmp, "");\r
1635                                         if(SelectFile(hDlg, Tmp, MSGJPN219, MSGJPN277, NULL, OFN_FILEMUSTEXIST, 0) == TRUE)\r
1636                                         {\r
1637                                                 switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1638                                                 {\r
1639                                                         case SOUND_CONNECT_BR :\r
1640                                                                 SendDlgItemMessage(hDlg, SOUND_CONNECT_WAV, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1641                                                                 break;\r
1642 \r
1643                                                         case SOUND_TRANS_BR :\r
1644                                                                 SendDlgItemMessage(hDlg, SOUND_TRANS_WAV, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1645                                                                 break;\r
1646 \r
1647                                                         case SOUND_ERROR_BR :\r
1648                                                                 SendDlgItemMessage(hDlg, SOUND_ERROR_WAV, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1649                                                                 break;\r
1650                                                 }\r
1651                                         }\r
1652                                         break;\r
1653 \r
1654                                 case SOUND_CONNECT_TEST :\r
1655                                         SendDlgItemMessage(hDlg, SOUND_CONNECT_WAV, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Tmp);\r
1656                                         sndPlaySound(Tmp, SND_ASYNC | SND_NODEFAULT);\r
1657                                         break;\r
1658 \r
1659                                 case SOUND_TRANS_TEST :\r
1660                                         SendDlgItemMessage(hDlg, SOUND_TRANS_WAV, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Tmp);\r
1661                                         sndPlaySound(Tmp, SND_ASYNC | SND_NODEFAULT);\r
1662                                         break;\r
1663 \r
1664                                 case SOUND_ERROR_TEST :\r
1665                                         SendDlgItemMessage(hDlg, SOUND_ERROR_WAV, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Tmp);\r
1666                                         sndPlaySound(Tmp, SND_ASYNC | SND_NODEFAULT);\r
1667                                         break;\r
1668                         }\r
1669                         return(TRUE);\r
1670         }\r
1671     return(FALSE);\r
1672 }\r
1673 \r
1674 \r
1675 /*----- その他の設定ウインドウのコールバック ----------------------------------\r
1676 *\r
1677 *       Parameter\r
1678 *               HWND hDlg : ウインドウハンドル\r
1679 *               UINT message : メッセージ番号\r
1680 *               WPARAM wParam : メッセージの WPARAM 引数\r
1681 *               LPARAM lParam : メッセージの LPARAM 引数\r
1682 *\r
1683 *       Return Value\r
1684 *               BOOL TRUE/FALSE\r
1685 *----------------------------------------------------------------------------*/\r
1686 \r
1687 // 64ビット対応\r
1688 //static BOOL CALLBACK MiscSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1689 static INT_PTR CALLBACK MiscSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1690 {\r
1691         NMHDR *pnmhdr;\r
1692         char Tmp[FMAX_PATH+1];\r
1693 \r
1694         switch (message)\r
1695         {\r
1696                 case WM_INITDIALOG :\r
1697                         SendDlgItemMessage(hDlg, MISC_WINPOS, BM_SETCHECK, SaveWinPos, 0);\r
1698                         SendDlgItemMessage(hDlg, MISC_DEBUG, BM_SETCHECK, DebugConsole, 0);\r
1699                         SendDlgItemMessage(hDlg, MISC_REGTYPE, BM_SETCHECK, RegType, 0);\r
1700                         // ポータブル版判定\r
1701                         if(AskForceIni() == YES)\r
1702                                 EnableWindow(GetDlgItem(hDlg, MISC_REGTYPE), FALSE);\r
1703                         // 全設定暗号化対応\r
1704                         SendDlgItemMessage(hDlg, MISC_ENCRYPT_SETTINGS, BM_SETCHECK, EncryptAllSettings, 0);\r
1705 \r
1706                         SendDlgItemMessage(hDlg, MISC_CACHE_SAVE, BM_SETCHECK, CacheSave, 0);\r
1707                         SendDlgItemMessage(hDlg, MISC_BUFNUM, EM_LIMITTEXT, (WPARAM)2, 0);\r
1708                         SetDecimalText(hDlg, MISC_BUFNUM, abs(CacheEntry));\r
1709                         SendDlgItemMessage(hDlg, MISC_BUFNUM_SPIN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(99, 1));\r
1710                         if(CacheEntry > 0)\r
1711                         {\r
1712                                 SendDlgItemMessage(hDlg, MISC_CACHE, BM_SETCHECK, 1, 0);\r
1713                                 EnableWindow(GetDlgItem(hDlg, MISC_BUFNUM), TRUE);\r
1714                                 EnableWindow(GetDlgItem(hDlg, MISC_CACHE_SAVE), TRUE);\r
1715                         }\r
1716                         else\r
1717                         {\r
1718                                 SendDlgItemMessage(hDlg, MISC_CACHE, BM_SETCHECK, 0, 0);\r
1719                                 EnableWindow(GetDlgItem(hDlg, MISC_BUFNUM), FALSE);\r
1720                                 EnableWindow(GetDlgItem(hDlg, MISC_CACHE_SAVE), FALSE);\r
1721                         }\r
1722 \r
1723                         SendDlgItemMessage(hDlg, MISC_CACHEDIR, EM_LIMITTEXT, (WPARAM)FMAX_PATH, 0);\r
1724                         SendDlgItemMessage(hDlg, MISC_CACHEDIR, WM_SETTEXT, 0, (LPARAM)TmpPath);\r
1725                     return(TRUE);\r
1726 \r
1727                 case WM_NOTIFY:\r
1728                         pnmhdr = (NMHDR FAR *)lParam;\r
1729                         switch(pnmhdr->code)\r
1730                         {\r
1731                                 case PSN_APPLY :\r
1732                                         SaveWinPos = SendDlgItemMessage(hDlg, MISC_WINPOS, BM_GETCHECK, 0, 0);\r
1733                                         DebugConsole = SendDlgItemMessage(hDlg, MISC_DEBUG, BM_GETCHECK, 0, 0);\r
1734                                         // ポータブル版判定\r
1735 //                                      RegType = SendDlgItemMessage(hDlg, MISC_REGTYPE, BM_GETCHECK, 0, 0);\r
1736                                         if(AskForceIni() == NO)\r
1737                                                 RegType = SendDlgItemMessage(hDlg, MISC_REGTYPE, BM_GETCHECK, 0, 0);\r
1738                                         // 全設定暗号化対応\r
1739                                         EncryptAllSettings = SendDlgItemMessage(hDlg, MISC_ENCRYPT_SETTINGS, BM_GETCHECK, 0, 0);\r
1740 \r
1741                                         CacheSave = SendDlgItemMessage(hDlg, MISC_CACHE_SAVE, BM_GETCHECK, 0, 0);\r
1742                                         CacheEntry = GetDecimalText(hDlg, MISC_BUFNUM);\r
1743                                         if(SendDlgItemMessage(hDlg, MISC_CACHE, BM_GETCHECK, 0, 0) == 0)\r
1744                                                 CacheEntry = -CacheEntry;\r
1745 \r
1746                                         SendDlgItemMessage(hDlg, MISC_CACHEDIR, WM_GETTEXT, FMAX_PATH+1, (LPARAM)TmpPath);\r
1747                                         break;\r
1748 \r
1749                                 case PSN_RESET :\r
1750                                         break;\r
1751 \r
1752                                 case PSN_HELP :\r
1753                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000052);\r
1754                                         break;\r
1755                         }\r
1756                         break;\r
1757 \r
1758                 case WM_COMMAND :\r
1759                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1760                         {\r
1761                                 case MISC_CACHE :\r
1762                                         if(SendDlgItemMessage(hDlg, MISC_CACHE, BM_GETCHECK, 0, 0) == 1)\r
1763                                         {\r
1764                                                 EnableWindow(GetDlgItem(hDlg, TRMODE_EXT), TRUE);\r
1765                                                 EnableWindow(GetDlgItem(hDlg, MISC_CACHE_SAVE), TRUE);\r
1766                                         }\r
1767                                         else\r
1768                                         {\r
1769                                                 EnableWindow(GetDlgItem(hDlg, TRMODE_EXT), FALSE);\r
1770                                                 EnableWindow(GetDlgItem(hDlg, MISC_CACHE_SAVE), FALSE);\r
1771                                         }\r
1772                                         break;\r
1773 \r
1774                                 case MISC_CACHEDIR_BR :\r
1775                                         if(SelectDir(hDlg, Tmp, FMAX_PATH) == TRUE)\r
1776                                                 SendDlgItemMessage(hDlg, MISC_CACHEDIR, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1777                                         break;\r
1778 \r
1779                                 case MISC_CACHEDIR_DEF :\r
1780                                         // 環境依存の不具合対策\r
1781 //                                      GetTempPath(FMAX_PATH, Tmp);\r
1782                                         GetAppTempPath(Tmp);\r
1783                                         SetYenTail(Tmp);\r
1784                                         SendDlgItemMessage(hDlg, MISC_CACHEDIR, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1785                                         break;\r
1786                         }\r
1787                         return(TRUE);\r
1788         }\r
1789     return(FALSE);\r
1790 }\r
1791 \r
1792 \r
1793 /*----- ソート設定ウインドウ --------------------------------------------------\r
1794 *\r
1795 *       Parameter\r
1796 *               なし\r
1797 *\r
1798 *       Return Value\r
1799 *               int ステータス (YES=実行/NO=取消)\r
1800 *----------------------------------------------------------------------------*/\r
1801 \r
1802 int SortSetting(void)\r
1803 {\r
1804         int Sts;\r
1805 \r
1806         Sts = DialogBox(GetFtpInst(), MAKEINTRESOURCE(sort_dlg), GetMainHwnd(), SortSettingProc);\r
1807         return(Sts);\r
1808 }\r
1809 \r
1810 \r
1811 /*----- ソート設定ウインドウのコールバック ------------------------------------\r
1812 *\r
1813 *       Parameter\r
1814 *               HWND hDlg : ウインドウハンドル\r
1815 *               UINT message : メッセージ番号\r
1816 *               WPARAM wParam : メッセージの WPARAM 引数\r
1817 *               LPARAM lParam : メッセージの LPARAM 引数\r
1818 *\r
1819 *       Return Value\r
1820 *               BOOL TRUE/FALSE\r
1821 *----------------------------------------------------------------------------*/\r
1822 \r
1823 // 64ビット対応\r
1824 //static BOOL CALLBACK SortSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1825 static INT_PTR CALLBACK SortSettingProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
1826 {\r
1827         int LFsort;\r
1828         int LDsort;\r
1829         int RFsort;\r
1830         int RDsort;\r
1831 \r
1832         static const RADIOBUTTON LsortOrdButton[] = {\r
1833                 { SORT_LFILE_NAME, SORT_NAME },\r
1834                 { SORT_LFILE_EXT, SORT_EXT },\r
1835                 { SORT_LFILE_SIZE, SORT_SIZE },\r
1836                 { SORT_LFILE_DATE, SORT_DATE }\r
1837         };\r
1838         #define LSORTORDBUTTONS (sizeof(LsortOrdButton)/sizeof(RADIOBUTTON))\r
1839 \r
1840         static const RADIOBUTTON LDirsortOrdButton[] = {\r
1841                 { SORT_LDIR_NAME, SORT_NAME },\r
1842                 { SORT_LDIR_DATE, SORT_DATE }\r
1843         };\r
1844         #define LDIRSORTORDBUTTONS      (sizeof(LDirsortOrdButton)/sizeof(RADIOBUTTON))\r
1845 \r
1846         static const RADIOBUTTON RsortOrdButton[] = {\r
1847                 { SORT_RFILE_NAME, SORT_NAME },\r
1848                 { SORT_RFILE_EXT, SORT_EXT },\r
1849                 { SORT_RFILE_SIZE, SORT_SIZE },\r
1850                 { SORT_RFILE_DATE, SORT_DATE }\r
1851         };\r
1852         #define RSORTORDBUTTONS (sizeof(RsortOrdButton)/sizeof(RADIOBUTTON))\r
1853 \r
1854         static const RADIOBUTTON RDirsortOrdButton[] = {\r
1855                 { SORT_RDIR_NAME, SORT_NAME },\r
1856                 { SORT_RDIR_DATE, SORT_DATE }\r
1857         };\r
1858         #define RDIRSORTORDBUTTONS      (sizeof(RDirsortOrdButton)/sizeof(RADIOBUTTON))\r
1859 \r
1860         switch (message)\r
1861         {\r
1862                 case WM_INITDIALOG :\r
1863 \r
1864                         SetRadioButtonByValue(hDlg, AskSortType(ITEM_LFILE) & SORT_MASK_ORD, LsortOrdButton, LSORTORDBUTTONS);\r
1865 \r
1866                         if((AskSortType(ITEM_LFILE) & SORT_GET_ORD) == SORT_ASCENT)\r
1867                                 SendDlgItemMessage(hDlg, SORT_LFILE_REV, BM_SETCHECK, 0, 0);\r
1868                         else\r
1869                                 SendDlgItemMessage(hDlg, SORT_LFILE_REV, BM_SETCHECK, 1, 0);\r
1870 \r
1871                         SetRadioButtonByValue(hDlg, AskSortType(ITEM_LDIR) & SORT_MASK_ORD, LDirsortOrdButton, LDIRSORTORDBUTTONS);\r
1872 \r
1873                         if((AskSortType(ITEM_LDIR) & SORT_GET_ORD) == SORT_ASCENT)\r
1874                                 SendDlgItemMessage(hDlg, SORT_LDIR_REV, BM_SETCHECK, 0, 0);\r
1875                         else\r
1876                                 SendDlgItemMessage(hDlg, SORT_LDIR_REV, BM_SETCHECK, 1, 0);\r
1877 \r
1878                         SetRadioButtonByValue(hDlg, AskSortType(ITEM_RFILE) & SORT_MASK_ORD, RsortOrdButton, RSORTORDBUTTONS);\r
1879 \r
1880                         if((AskSortType(ITEM_RFILE) & SORT_GET_ORD) == SORT_ASCENT)\r
1881                                 SendDlgItemMessage(hDlg, SORT_RFILE_REV, BM_SETCHECK, 0, 0);\r
1882                         else\r
1883                                 SendDlgItemMessage(hDlg, SORT_RFILE_REV, BM_SETCHECK, 1, 0);\r
1884 \r
1885                         SetRadioButtonByValue(hDlg, AskSortType(ITEM_RDIR) & SORT_MASK_ORD, RDirsortOrdButton, RDIRSORTORDBUTTONS);\r
1886 \r
1887                         if((AskSortType(ITEM_RDIR) & SORT_GET_ORD) == SORT_ASCENT)\r
1888                                 SendDlgItemMessage(hDlg, SORT_RDIR_REV, BM_SETCHECK, 0, 0);\r
1889                         else\r
1890                                 SendDlgItemMessage(hDlg, SORT_RDIR_REV, BM_SETCHECK, 1, 0);\r
1891 \r
1892                         SendDlgItemMessage(hDlg, SORT_SAVEHOST, BM_SETCHECK, AskSaveSortToHost(), 0);\r
1893 \r
1894                     return(TRUE);\r
1895 \r
1896                 case WM_COMMAND :\r
1897                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
1898                         {\r
1899                                 case IDOK :\r
1900                                         LFsort = AskRadioButtonValue(hDlg, LsortOrdButton, LSORTORDBUTTONS);\r
1901 \r
1902                                         if(SendDlgItemMessage(hDlg, SORT_LFILE_REV, BM_GETCHECK, 0, 0) == 1)\r
1903                                                 LFsort |= SORT_DESCENT;\r
1904 \r
1905                                         LDsort = AskRadioButtonValue(hDlg, LDirsortOrdButton, LDIRSORTORDBUTTONS);\r
1906 \r
1907                                         if(SendDlgItemMessage(hDlg, SORT_LDIR_REV, BM_GETCHECK, 0, 0) == 1)\r
1908                                                 LDsort |= SORT_DESCENT;\r
1909 \r
1910                                         RFsort = AskRadioButtonValue(hDlg, RsortOrdButton, RSORTORDBUTTONS);\r
1911 \r
1912                                         if(SendDlgItemMessage(hDlg, SORT_RFILE_REV, BM_GETCHECK, 0, 0) == 1)\r
1913                                                 RFsort |= SORT_DESCENT;\r
1914 \r
1915                                         RDsort = AskRadioButtonValue(hDlg, RDirsortOrdButton, RDIRSORTORDBUTTONS);\r
1916 \r
1917                                         if(SendDlgItemMessage(hDlg, SORT_RDIR_REV, BM_GETCHECK, 0, 0) == 1)\r
1918                                                 RDsort |= SORT_DESCENT;\r
1919 \r
1920                                         SetSortTypeImm(LFsort, LDsort, RFsort, RDsort);\r
1921 \r
1922                                         SetSaveSortToHost(SendDlgItemMessage(hDlg, SORT_SAVEHOST, BM_GETCHECK, 0, 0));\r
1923 \r
1924                                         EndDialog(hDlg, YES);\r
1925                                         break;\r
1926 \r
1927                                 case IDCANCEL :\r
1928                                         EndDialog(hDlg, NO);\r
1929                                         break;\r
1930         \r
1931                                 case IDHELP :\r
1932                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000001);\r
1933                                         break;\r
1934                 }\r
1935                         return(TRUE);\r
1936         }\r
1937     return(FALSE);\r
1938 }\r
1939 \r
1940 \r
1941 /*----- ダイアログのコントロールから10進数を取得 ----------------------------\r
1942 *\r
1943 *       Parameter\r
1944 *               HWND hDlg : ウインドウハンドル\r
1945 *               int Ctrl : コントロールのID\r
1946 *\r
1947 *       Return Value\r
1948 *               なし\r
1949 *----------------------------------------------------------------------------*/\r
1950 \r
1951 // hostman.cで使用\r
1952 //static int GetDecimalText(HWND hDlg, int Ctrl)\r
1953 int GetDecimalText(HWND hDlg, int Ctrl)\r
1954 {\r
1955         char Tmp[40];\r
1956 \r
1957         SendDlgItemMessage(hDlg, Ctrl, WM_GETTEXT, (WPARAM)39, (LPARAM)Tmp);\r
1958         return(atoi(Tmp));\r
1959 }\r
1960 \r
1961 \r
1962 /*----- ダイアログのコントロールに10進数をセット ----------------------------\r
1963 *\r
1964 *       Parameter\r
1965 *               HWND hDlg : ウインドウハンドル\r
1966 *               int Ctrl : コントロールのID\r
1967 *               int Num : 数値\r
1968 *\r
1969 *       Return Value\r
1970 *               なし\r
1971 *----------------------------------------------------------------------------*/\r
1972 \r
1973 // hostman.cで使用\r
1974 //static void SetDecimalText(HWND hDlg, int Ctrl, int Num)\r
1975 void SetDecimalText(HWND hDlg, int Ctrl, int Num)\r
1976 {\r
1977         char Tmp[40];\r
1978 \r
1979         sprintf(Tmp, "%d", Num);\r
1980         SendDlgItemMessage(hDlg, Ctrl, WM_SETTEXT, 0, (LPARAM)Tmp);\r
1981         return;\r
1982 }\r
1983 \r
1984 \r
1985 /*----- 設定値の範囲チェック --------------------------------------------------\r
1986 *\r
1987 *       Parameter\r
1988 *               int *Cur : 設定値\r
1989 *               int Max : 最大値\r
1990 *               int Min : 最小値\r
1991 *\r
1992 *       Return Value\r
1993 *               なし\r
1994 *\r
1995 *       Parameter change\r
1996 *               int *Cur : 設定値\r
1997 *----------------------------------------------------------------------------*/\r
1998 \r
1999 // hostman.cで使用\r
2000 //static void CheckRange2(int *Cur, int Max, int Min)\r
2001 void CheckRange2(int *Cur, int Max, int Min)\r
2002 {\r
2003         if(*Cur < Min)\r
2004                 *Cur = Min;\r
2005         if(*Cur > Max)\r
2006                 *Cur = Max;\r
2007         return;\r
2008 }\r
2009 \r
2010 \r
2011 /*----- 文字列をリストボックスに追加 ------------------------------------------\r
2012 *\r
2013 *       Parameter\r
2014 *               HWND hDlg : ダイアログボックスのウインドウハンドル\r
2015 *               char *Str : 文字列\r
2016 *               int CtrlList : リストボックスのID\r
2017 *               int BufSize : バッファサイズ\r
2018 *\r
2019 *       Return Value\r
2020 *               なし\r
2021 *----------------------------------------------------------------------------*/\r
2022 \r
2023 // hostman.cで使用\r
2024 //static void AddTextToListBox(HWND hDlg, char *Str, int CtrlList, int BufSize)\r
2025 void AddTextToListBox(HWND hDlg, char *Str, int CtrlList, int BufSize)\r
2026 {\r
2027         char Tmp[FMAX_PATH+1];\r
2028         int Num;\r
2029         int i;\r
2030         int Len;\r
2031 \r
2032         Len = strlen(Str);\r
2033         if(Len > 0)\r
2034         {\r
2035                 Len++;\r
2036                 Num = SendDlgItemMessage(hDlg, CtrlList, LB_GETCOUNT, 0, 0);\r
2037                 for(i = 0; i < Num; i++)\r
2038                 {\r
2039                         SendDlgItemMessage(hDlg, CtrlList, LB_GETTEXT, i, (LPARAM)Tmp);\r
2040                         Len += strlen(Tmp) + 1;\r
2041                 }\r
2042 \r
2043                 if(Len > (BufSize-1))\r
2044                         MessageBeep(-1);\r
2045                 else\r
2046                         SendDlgItemMessage(hDlg, CtrlList, LB_ADDSTRING, 0, (LPARAM)Str);\r
2047         }\r
2048         return;\r
2049 }\r
2050 \r
2051 \r
2052 /*----- マルチ文字列をリストボックスにセット ----------------------------------\r
2053 *\r
2054 *       Parameter\r
2055 *               HWND hDlg : ダイアログボックスのウインドウハンドル\r
2056 *               int CtrlList : リストボックスのID\r
2057 *               char *Text : 文字列\r
2058 *\r
2059 *       Return Value\r
2060 *               なし\r
2061 *----------------------------------------------------------------------------*/\r
2062 \r
2063 // hostman.cで使用\r
2064 //static void SetMultiTextToList(HWND hDlg, int CtrlList, char *Text)\r
2065 void SetMultiTextToList(HWND hDlg, int CtrlList, char *Text)\r
2066 {\r
2067         char *Pos;\r
2068 \r
2069         Pos = Text;\r
2070         while(*Pos != NUL)\r
2071         {\r
2072                 SendDlgItemMessage(hDlg, CtrlList, LB_ADDSTRING, 0, (LPARAM)Pos);\r
2073                 Pos += strlen(Pos) + 1;\r
2074         }\r
2075         return;\r
2076 }\r
2077 \r
2078 \r
2079 /*----- リストボックスの内容をマルチ文字列にする ------------------------------\r
2080 *\r
2081 *       Parameter\r
2082 *               HWND hDlg : ダイアログボックスのウインドウハンドル\r
2083 *               int CtrlList : リストボックスのID\r
2084 *               char *Buf : 文字列をセットするバッファ\r
2085 *               int BufSize : バッファのサイズ\r
2086 *\r
2087 *       Return Value\r
2088 *               なし\r
2089 *----------------------------------------------------------------------------*/\r
2090 \r
2091 // hostman.cで使用\r
2092 //static void GetMultiTextFromList(HWND hDlg, int CtrlList, char *Buf, int BufSize)\r
2093 void GetMultiTextFromList(HWND hDlg, int CtrlList, char *Buf, int BufSize)\r
2094 {\r
2095         char Tmp[FMAX_PATH+1];\r
2096         int Num;\r
2097         int i;\r
2098 \r
2099         memset(Buf, NUL, BufSize);\r
2100         Num = SendDlgItemMessage(hDlg, CtrlList, LB_GETCOUNT, 0, 0);\r
2101         for(i = 0; i < Num; i++)\r
2102         {\r
2103                 SendDlgItemMessage(hDlg, CtrlList, LB_GETTEXT, i, (LPARAM)Tmp);\r
2104                 strcpy(Buf + StrMultiLen(Buf), Tmp);\r
2105         }\r
2106         return;\r
2107 }\r
2108 \r
2109 \r