OSDN Git Service

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