OSDN Git Service

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