OSDN Git Service

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