OSDN Git Service

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