OSDN Git Service

initial commit from 1.97b zip archive
[ffftp/ffftp.git] / bookmark.c
1 /*=============================================================================\r
2 *\r
3 *                                                               \83u\83b\83N\83}\81[\83N\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 WINVER 0x400\r
31 \r
32 #define STRICT\r
33 #include <windows.h>\r
34 #include <stdio.h>\r
35 #include <stdlib.h>\r
36 #include <string.h>\r
37 #include <mbstring.h>\r
38 #include <malloc.h>\r
39 #include <windowsx.h>\r
40 #include <commctrl.h>\r
41 \r
42 #include "common.h"\r
43 #include "resource.h"\r
44 \r
45 #include <htmlhelp.h>\r
46 #include "helpid.h"\r
47 \r
48 \r
49 /*===== \83v\83\8d\83g\83^\83C\83v =====*/\r
50 \r
51 static int AddBookMark(char *Path);\r
52 static int GetBothPath(char *Str, char **Path1, char **Path2);\r
53 static BOOL CALLBACK EditBookMarkProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
54 static BOOL CALLBACK BookMarkEditCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
55 \r
56 /*===== \8aO\95\94\8eQ\8fÆ =====*/\r
57 \r
58 extern HWND hHelpWin;\r
59 \r
60 /* \90Ý\92è\92l */\r
61 extern HFONT ListFont;          /* \83\8a\83X\83g\83{\83b\83N\83X\82Ì\83t\83H\83\93\83g */\r
62 extern SIZE BmarkDlgSize;\r
63 \r
64 \r
65 \r
66 /*----- \83u\83b\83N\83}\81[\83N\82ð\83N\83\8a\83A\82·\82é ----------------------------------------------\r
67 *\r
68 *       Parameter\r
69 *               \82È\82µ\r
70 *\r
71 *       Return Value\r
72 *               \82È\82µ\r
73 *----------------------------------------------------------------------------*/\r
74 \r
75 void ClearBookMark(void)\r
76 {\r
77         HMENU hMenu;\r
78 \r
79         hMenu = GetSubMenu(GetMenu(GetMainHwnd()), BMARK_SUB_MENU);\r
80         while(GetMenuItemCount(hMenu) > DEFAULT_BMARK_ITEM)\r
81                 DeleteMenu(hMenu, DEFAULT_BMARK_ITEM, MF_BYPOSITION);\r
82         return;\r
83 }\r
84 \r
85 \r
86 /*----- \83J\83\8c\83\93\83g\83f\83B\83\8c\83N\83g\83\8a\82ð\83u\83b\83N\83}\81[\83N\82É\92Ç\89Á ------------------------------\r
87 *\r
88 *       Parameter\r
89 *               int Win : \83E\83C\83\93\83h\83E\94Ô\8d\86 (WIN_xxx)\r
90 *\r
91 *       Return Value\r
92 *               \82È\82µ\r
93 *----------------------------------------------------------------------------*/\r
94 \r
95 void AddCurDirToBookMark(int Win)\r
96 {\r
97         char Buf[BMARK_MARK_LEN + FMAX_PATH * 2 + BMARK_SEP_LEN + 1];\r
98 \r
99         if(Win == WIN_LOCAL)\r
100         {\r
101                 strcpy(Buf, BMARK_MARK_LOCAL);\r
102                 AskLocalCurDir(Buf + BMARK_MARK_LEN, FMAX_PATH);\r
103         }\r
104         else if(Win == WIN_REMOTE)\r
105         {\r
106                 strcpy(Buf, BMARK_MARK_REMOTE);\r
107                 AskRemoteCurDir(Buf + BMARK_MARK_LEN, FMAX_PATH);\r
108         }\r
109         else\r
110         {\r
111                 strcpy(Buf, BMARK_MARK_BOTH);\r
112                 AskLocalCurDir(Buf + BMARK_MARK_LEN, FMAX_PATH);\r
113                 strcat(Buf, BMARK_SEP);\r
114                 AskRemoteCurDir(Buf + strlen(Buf), FMAX_PATH);\r
115         }\r
116         AddBookMark(Buf);\r
117         return;\r
118 }\r
119 \r
120 \r
121 /*----- \83u\83b\83N\83}\81[\83N\82É\83p\83X\82ð\93o\98^\82·\82é ------------------------------------------\r
122 *\r
123 *       Parameter\r
124 *               char *Path : \83p\83X\96¼\r
125 *\r
126 *       Return Value\r
127 *               int \83X\83e\81[\83^\83X\r
128 *                       SUCCESS/FAIL\r
129 *----------------------------------------------------------------------------*/\r
130 \r
131 static int AddBookMark(char *Path)\r
132 {\r
133         HMENU hMenu;\r
134         int MarkID;\r
135         int Sts;\r
136 \r
137         Sts = FAIL;\r
138         hMenu = GetSubMenu(GetMenu(GetMainHwnd()), BMARK_SUB_MENU);\r
139         MarkID = (GetMenuItemCount(hMenu) - DEFAULT_BMARK_ITEM) + MENU_BMARK_TOP;\r
140         if(AppendMenu(hMenu, MF_STRING, MarkID, Path) == TRUE)\r
141                 Sts = SUCCESS;\r
142         return(Sts);\r
143 }\r
144 \r
145 \r
146 /*----- \8ew\92è\82ÌID\82ð\8e\9d\82Â\83u\83b\83N\83}\81[\83N\82Ì\83p\83X\82ð\95Ô\82· --------------------------------\r
147 *\r
148 *       Parameter\r
149 *               int MarkID : ID\r
150 *               char *Local : \83\8d\81[\83J\83\8b\91¤\82Ì\83p\83X\82ð\95Ô\82·\83o\83b\83t\83@\r
151 *               char *Remote : \83\8a\83\82\81[\83g\91¤\82Ì\83p\83X\82ð\95Ô\82·\83o\83b\83t\83@\r
152 *               int Max : \83o\83b\83t\83@\82Ì\83T\83C\83Y\r
153 *\r
154 *       Return Value\r
155 *               int \83X\83e\81[\83^\83X (BMARK_TYPE_xxx)\r
156 *----------------------------------------------------------------------------*/\r
157 \r
158 int AskBookMarkText(int MarkID, char *Local, char *Remote, int Max)\r
159 {\r
160         HMENU hMenu;\r
161         MENUITEMINFO mInfo;\r
162         int Sts;\r
163         char Tmp[BMARK_MARK_LEN + FMAX_PATH * 2 + BMARK_SEP_LEN + 1];\r
164         char *Path1;\r
165         char *Path2;\r
166         int Num;\r
167 \r
168         memset(Local, NUL, Max);\r
169         memset(Remote, NUL, Max);\r
170 \r
171         Sts = BMARK_TYPE_NONE;\r
172         hMenu = GetSubMenu(GetMenu(GetMainHwnd()), BMARK_SUB_MENU);\r
173 \r
174         mInfo.cbSize = sizeof(MENUITEMINFO);\r
175         mInfo.fMask = MIIM_TYPE;\r
176         mInfo.dwTypeData = Tmp;\r
177         mInfo.cch = BMARK_MARK_LEN + FMAX_PATH * 2 + BMARK_SEP_LEN;\r
178         if(GetMenuItemInfo(hMenu, MarkID, FALSE, &mInfo) == TRUE)\r
179         {\r
180                 Num = GetBothPath(Tmp, &Path1, &Path2);\r
181                 if(strncmp(Tmp, BMARK_MARK_LOCAL, BMARK_MARK_LEN) == 0)\r
182                 {\r
183                         Sts = BMARK_TYPE_LOCAL;\r
184                         strncpy(Local, Path1, Max-1);\r
185                 }\r
186                 else if(strncmp(Tmp, BMARK_MARK_REMOTE, BMARK_MARK_LEN) == 0)\r
187                 {\r
188                         Sts = BMARK_TYPE_REMOTE;\r
189                         strncpy(Remote, Path1, Max-1);\r
190                 }\r
191                 else if(strncmp(Tmp, BMARK_MARK_BOTH, BMARK_MARK_LEN) == 0)\r
192                 {\r
193                         if(Num == 2)\r
194                         {\r
195                                 strncpy(Local, Path1, Max-1);\r
196                                 strncpy(Remote, Path2, Max-1);\r
197                                 Sts = BMARK_TYPE_BOTH;\r
198                         }\r
199                 }\r
200         }\r
201         return(Sts);\r
202 }\r
203 \r
204 \r
205 /*----- \83u\83b\83N\83}\81[\83N\82Ì\95\8e\9a\97ñ\82©\82ç\82Q\82Â\82Ì\83p\83X\82ð\8eæ\82è\8fo\82· --------------------------\r
206 *\r
207 *       Parameter\r
208 *               char *Str : \95\8e\9a\97ñ\r
209 *               char **Local : \83\8d\81[\83J\83\8b\91¤\82Ì\83p\83X\82Ì\90æ\93ª\82ð\95Ô\82·\83\8f\81[\83N\r
210 *               char **Remote : \83\8a\83\82\81[\83g\91¤\82Ì\83p\83X\82Ì\90æ\93ª\82ð\95Ô\82·\83\8f\81[\83N\r
211 *\r
212 *       Return Value\r
213 *               int \83p\83X\82Ì\8cÂ\90\94 (1 or 2)\r
214 *\r
215 *       Note\r
216 *               Str\82Ì\93à\97e\82ð\8f\91\82«\8a·\82¦\82é\r
217 *----------------------------------------------------------------------------*/\r
218 \r
219 static int GetBothPath(char *Str, char **Path1, char **Path2)\r
220 {\r
221         char *Pos;\r
222         int Ret;\r
223 \r
224         Ret = 1;\r
225         *Path1 = Str + BMARK_MARK_LEN;\r
226 \r
227         Pos = _mbsstr(Str, BMARK_SEP);\r
228         if(Pos != NULL)\r
229         {\r
230                 Ret = 2;\r
231                 *Pos = NUL;\r
232                 *Path2 = Pos + BMARK_SEP_LEN;\r
233         }\r
234         return(Ret);\r
235 }\r
236 \r
237 \r
238 /*----- \83u\83b\83N\83}\81[\83N\82ð\90Ú\91±\92\86\82Ì\83z\83X\83g\83\8a\83X\83g\82É\95Û\91\82·\82é --------------------------\r
239 *\r
240 *       Parameter\r
241 *               \82È\82µ\r
242 *\r
243 *       Return Value\r
244 *               \82È\82µ\r
245 *----------------------------------------------------------------------------*/\r
246 \r
247 void SaveBookMark(void)\r
248 {\r
249         HMENU hMenu;\r
250         MENUITEMINFO mInfo;\r
251         int i;\r
252         int Cnt;\r
253         char *Buf;\r
254         char *Pos;\r
255         int Len;\r
256         char Tmp[BMARK_MARK_LEN + FMAX_PATH * 2 + BMARK_SEP_LEN + 1];\r
257         int CurHost;\r
258 \r
259         if(AskConnecting() == YES)\r
260         {\r
261                 if((CurHost = AskCurrentHost()) != HOSTNUM_NOENTRY)\r
262                 {\r
263                         if((Buf = malloc(BOOKMARK_SIZE)) != NULL)\r
264                         {\r
265                                 hMenu = GetSubMenu(GetMenu(GetMainHwnd()), BMARK_SUB_MENU);\r
266 \r
267                                 Pos = Buf;\r
268                                 Len = 0;\r
269                                 Cnt = GetMenuItemCount(hMenu);\r
270                                 for(i = DEFAULT_BMARK_ITEM; i < Cnt; i++)\r
271                                 {\r
272                                         mInfo.cbSize = sizeof(MENUITEMINFO);\r
273                                         mInfo.fMask = MIIM_TYPE;\r
274                                         mInfo.dwTypeData = Tmp;\r
275                                         mInfo.cch = FMAX_PATH;\r
276                                         if(GetMenuItemInfo(hMenu, i, TRUE, &mInfo) == TRUE)\r
277                                         {\r
278                                                 if(Len + strlen(Tmp) + 2 <= BOOKMARK_SIZE)\r
279                                                 {\r
280                                                         strcpy(Pos, Tmp);\r
281                                                         Pos += strlen(Tmp) + 1;\r
282                                                         Len += strlen(Tmp) + 1;\r
283                                                 }\r
284                                         }\r
285                                 }\r
286 \r
287                                 if(Pos == Buf)\r
288                                 {\r
289                                         memset(Buf, NUL, 2);\r
290                                         Len = 2;\r
291                                 }\r
292                                 else\r
293                                 {\r
294                                         *Pos = NUL;\r
295                                         Len++;\r
296                                 }\r
297 \r
298                                 SetHostBookMark(CurHost, Buf, Len);\r
299 \r
300                                 free(Buf);\r
301                         }\r
302                 }\r
303         }\r
304         return;\r
305 }\r
306 \r
307 \r
308 /*----- \83z\83X\83g\83\8a\83X\83g\82©\82ç\83u\83b\83N\83}\81[\83N\82ð\93Ç\82Ý\8d\9e\82Þ --------------------------------\r
309 *\r
310 *       Parameter\r
311 *               \82È\82µ\r
312 *\r
313 *       Return Value\r
314 *               \82È\82µ\r
315 *----------------------------------------------------------------------------*/\r
316 \r
317 void LoadBookMark(void)\r
318 {\r
319         char *Buf;\r
320         char *Pos;\r
321         int CurHost;\r
322         char Tmp[FMAX_PATH + BMARK_MARK_LEN + 1];\r
323 \r
324         if(AskConnecting() == YES)\r
325         {\r
326                 if((CurHost = AskCurrentHost()) != HOSTNUM_NOENTRY)\r
327                 {\r
328                         if((Buf = AskHostBookMark(CurHost)) != NULL)\r
329                         {\r
330                                 ClearBookMark();\r
331                                 Pos = Buf;\r
332                                 while(*Pos != NUL)\r
333                                 {\r
334                                         /* \8b\8c\83t\83H\81[\83}\83b\83g\82Ì\82½\82ß\82Ì\8f\88\97\9d */\r
335                                         /* \81i\83p\83X\82É"L"\82â"H"\82ª\82Â\82¢\82Ä\82È\82¢\95¨\81j */\r
336                                         if((strncmp(Pos, BMARK_MARK_LOCAL, BMARK_MARK_LEN) != 0) &&\r
337                                            (strncmp(Pos, BMARK_MARK_REMOTE, BMARK_MARK_LEN) != 0) &&\r
338                                            (strncmp(Pos, BMARK_MARK_BOTH, BMARK_MARK_LEN) != 0))\r
339                                         {\r
340                                                 strcpy(Tmp, BMARK_MARK_REMOTE);\r
341                                                 strcat(Tmp, Pos);\r
342                                                 AddBookMark(Tmp);\r
343                                         }\r
344                                         else\r
345                                                 AddBookMark(Pos);\r
346 \r
347                                         Pos += strlen(Pos) + 1;\r
348                                 }\r
349                         }\r
350                 }\r
351         }\r
352         return;\r
353 }\r
354 \r
355 \r
356 /*----- \83u\83b\83N\83}\81[\83N\95Ò\8fW\83E\83C\83\93\83h\83E --------------------------------------------\r
357 *\r
358 *       Parameter\r
359 *               \82È\82µ\r
360 *\r
361 *       Return Value\r
362 *               \83X\83e\81[\83^\83X (YES=\8eÀ\8ds/NO=\8eæ\8fÁ)\r
363 *----------------------------------------------------------------------------*/\r
364 \r
365 int EditBookMark(void)\r
366 {\r
367         int Sts;\r
368 \r
369         Sts = DialogBox(GetFtpInst(), MAKEINTRESOURCE(bmark_dlg), GetMainHwnd(), EditBookMarkProc);\r
370         return(Sts);\r
371 }\r
372 \r
373 \r
374 /*----- \83u\83b\83N\83}\81[\83N\95Ò\8fW\83E\83C\83\93\83h\83E\82Ì\83R\81[\83\8b\83o\83b\83N ------------------------------\r
375 *\r
376 *       Parameter\r
377 *               HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
378 *               UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
379 *               WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
380 *               LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
381 *\r
382 *       Return Value\r
383 *               BOOL TRUE/FALSE\r
384 *----------------------------------------------------------------------------*/\r
385 \r
386 static BOOL CALLBACK EditBookMarkProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
387 {\r
388         HMENU hMenu;\r
389         MENUITEMINFO mInfo;\r
390         int Cur;\r
391         int Max;\r
392         char Tmp[BMARK_MARK_LEN + FMAX_PATH * 2 + BMARK_SEP_LEN + 1];\r
393 \r
394         static DIALOGSIZE DlgSize = {\r
395                 { BMARK_NEW, BMARK_SET, BMARK_DEL, BMARK_DOWN, BMARK_UP, IDHELP, BMARK_SIZEGRIP, -1 },\r
396                 { IDOK, BMARK_JUMP, BMARK_SIZEGRIP, -1 },\r
397                 { BMARK_LIST, -1 },\r
398                 { 0, 0 },\r
399                 { 0, 0 }\r
400         };\r
401 \r
402         switch (message)\r
403         {\r
404                 case WM_INITDIALOG :\r
405                         if(ListFont != NULL)\r
406                                 SendDlgItemMessage(hDlg, BMARK_LIST, WM_SETFONT, (WPARAM)ListFont, MAKELPARAM(TRUE, 0));\r
407 \r
408                         hMenu = GetSubMenu(GetMenu(GetMainHwnd()), BMARK_SUB_MENU);\r
409                         Max = GetMenuItemCount(hMenu);\r
410                         for(Cur = DEFAULT_BMARK_ITEM; Cur < Max; Cur++)\r
411                         {\r
412                                 mInfo.cbSize = sizeof(MENUITEMINFO);\r
413                                 mInfo.fMask = MIIM_TYPE;\r
414                                 mInfo.dwTypeData = Tmp;\r
415                                 mInfo.cch = FMAX_PATH;\r
416                                 if(GetMenuItemInfo(hMenu, Cur, TRUE, &mInfo) == TRUE)\r
417                                         SendDlgItemMessage(hDlg, BMARK_LIST, LB_ADDSTRING, 0, (LPARAM)Tmp);\r
418                         }\r
419                         DlgSizeInit(hDlg, &DlgSize, &BmarkDlgSize);\r
420                     return(TRUE);\r
421 \r
422                 case WM_COMMAND :\r
423                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
424                         {\r
425                                 case BMARK_JUMP :\r
426                                         if((Cur = SendDlgItemMessage(hDlg, BMARK_LIST, LB_GETCURSEL, 0, 0)) != LB_ERR)\r
427                                                 PostMessage(GetMainHwnd(), WM_COMMAND, MAKEWPARAM(Cur+MENU_BMARK_TOP, 0), 0);\r
428                                         /* \82±\82±\82É break \82Í\82È\82¢ */\r
429 \r
430                                 case IDCANCEL :\r
431                                 case IDOK :\r
432                                         ClearBookMark();\r
433                                         Max = SendDlgItemMessage(hDlg, BMARK_LIST, LB_GETCOUNT, 0, 0);\r
434                                         for(Cur = 0; Cur < Max; Cur++)\r
435                                         {\r
436                                                 SendDlgItemMessage(hDlg, BMARK_LIST, LB_GETTEXT, Cur, (LPARAM)Tmp);\r
437                                                 AddBookMark(Tmp);\r
438                                         }\r
439                                         AskDlgSize(hDlg, &DlgSize, &BmarkDlgSize);\r
440                                         EndDialog(hDlg, YES);\r
441                                         break;\r
442 \r
443                                 case BMARK_SET :\r
444                                         if((Cur = SendDlgItemMessage(hDlg, BMARK_LIST, LB_GETCURSEL, 0, 0)) != LB_ERR)\r
445                                         {\r
446                                                 SendDlgItemMessage(hDlg, BMARK_LIST, LB_GETTEXT, Cur, (LPARAM)Tmp);\r
447                                                 if(DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(bmark_edit_dlg), hDlg, BookMarkEditCallBack, (LPARAM)Tmp) == YES)\r
448                                                 {\r
449                                                         SendDlgItemMessage(hDlg, BMARK_LIST, LB_DELETESTRING, Cur, 0);\r
450                                                         SendDlgItemMessage(hDlg, BMARK_LIST, LB_INSERTSTRING, Cur, (LPARAM)Tmp);\r
451                                                         SendDlgItemMessage(hDlg, BMARK_LIST, LB_SETCURSEL, Cur, 0);\r
452                                                 }\r
453                                         }\r
454                                         break;\r
455 \r
456                                 case BMARK_NEW :\r
457                                         strcpy(Tmp, "");\r
458                                         if(DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(bmark_edit_dlg), hDlg, BookMarkEditCallBack, (LPARAM)Tmp) == YES)\r
459                                         {\r
460                                                 SendDlgItemMessage(hDlg, BMARK_LIST, LB_ADDSTRING, 0, (LPARAM)Tmp);\r
461                                                 Cur = SendDlgItemMessage(hDlg, BMARK_LIST, LB_GETCOUNT, 0, 0) - 1;\r
462                                                 SendDlgItemMessage(hDlg, BMARK_LIST, LB_SETCURSEL, Cur, 0);\r
463                                         }\r
464                                         break;\r
465 \r
466                                 case BMARK_DEL :\r
467                                         if((Cur = SendDlgItemMessage(hDlg, BMARK_LIST, LB_GETCURSEL, 0, 0)) != LB_ERR)\r
468                                         {\r
469                                                 SendDlgItemMessage(hDlg, BMARK_LIST, LB_DELETESTRING, Cur, 0);\r
470                                                 if(Cur >= SendDlgItemMessage(hDlg, BMARK_LIST, LB_GETCOUNT, 0, 0))\r
471                                                         Cur = max1(0, SendDlgItemMessage(hDlg, BMARK_LIST, LB_GETCOUNT, 0, 0)-1);\r
472                                                 if(SendDlgItemMessage(hDlg, BMARK_LIST, LB_GETCOUNT, 0, 0) > 0)\r
473                                                         SendDlgItemMessage(hDlg, BMARK_LIST, LB_SETCURSEL, Cur, 0);\r
474                                         }\r
475                                         break;\r
476 \r
477                                 case BMARK_UP :\r
478                                         if((Cur = SendDlgItemMessage(hDlg, BMARK_LIST, LB_GETCURSEL, 0, 0)) != LB_ERR)\r
479                                         {\r
480                                                 if(Cur > 0)\r
481                                                 {\r
482                                                         SendDlgItemMessage(hDlg, BMARK_LIST, LB_GETTEXT, Cur, (LPARAM)Tmp);\r
483                                                         SendDlgItemMessage(hDlg, BMARK_LIST, LB_DELETESTRING, Cur, 0);\r
484                                                         SendDlgItemMessage(hDlg, BMARK_LIST, LB_INSERTSTRING, --Cur, (LPARAM)Tmp);\r
485                                                         SendDlgItemMessage(hDlg, BMARK_LIST, LB_SETCURSEL, Cur, 0);\r
486                                                 }\r
487                                         }\r
488                                         break;\r
489 \r
490                                 case BMARK_DOWN :\r
491                                         if((Cur = SendDlgItemMessage(hDlg, BMARK_LIST, LB_GETCURSEL, 0, 0)) != LB_ERR)\r
492                                         {\r
493                                                 if(Cur < SendDlgItemMessage(hDlg, BMARK_LIST, LB_GETCOUNT, 0, 0)-1)\r
494                                                 {\r
495                                                         SendDlgItemMessage(hDlg, BMARK_LIST, LB_GETTEXT, Cur, (LPARAM)Tmp);\r
496                                                         SendDlgItemMessage(hDlg, BMARK_LIST, LB_DELETESTRING, Cur, 0);\r
497                                                         SendDlgItemMessage(hDlg, BMARK_LIST, LB_INSERTSTRING, ++Cur, (LPARAM)Tmp);\r
498                                                         SendDlgItemMessage(hDlg, BMARK_LIST, LB_SETCURSEL, Cur, 0);\r
499                                                 }\r
500                                         }\r
501                                         break;\r
502 \r
503                                 case IDHELP :\r
504                                         hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000019);\r
505                                         break;\r
506                         }\r
507                         return(TRUE);\r
508 \r
509                 case WM_SIZING :\r
510                         DlgSizeChange(hDlg, &DlgSize, (RECT *)lParam, (int)wParam);\r
511                     return(TRUE);\r
512 \r
513         }\r
514     return(FALSE);\r
515 }\r
516 \r
517 \r
518 /*----- \83u\83b\83N\83}\81[\83N\93ü\97Í\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N ------------------------------\r
519 *\r
520 *       Parameter\r
521 *               HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
522 *               UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
523 *               WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
524 *               LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
525 *\r
526 *       Return Value\r
527 *               BOOL TRUE/FALSE\r
528 *----------------------------------------------------------------------------*/\r
529 \r
530 static BOOL CALLBACK BookMarkEditCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
531 {\r
532         static char *Str;\r
533         char *Path1;\r
534         char *Path2;\r
535         char Local[FMAX_PATH+1];\r
536         char Remote[FMAX_PATH+1];\r
537         int Num;\r
538 \r
539         switch (iMessage)\r
540         {\r
541                 case WM_INITDIALOG :\r
542                         Str = (char *)lParam;\r
543                         SendDlgItemMessage(hDlg, BEDIT_LOCAL, EM_LIMITTEXT, FMAX_PATH-1, 0);\r
544                         SendDlgItemMessage(hDlg, BEDIT_REMOTE, EM_LIMITTEXT, FMAX_PATH-1, 0);\r
545                         if(strlen(Str) > BMARK_MARK_LEN)\r
546                         {\r
547                                 Num = GetBothPath(Str, &Path1, &Path2);\r
548                                 if(strncmp(Str, BMARK_MARK_LOCAL, BMARK_MARK_LEN) == 0)\r
549                                         SendDlgItemMessage(hDlg, BEDIT_LOCAL, WM_SETTEXT, 0, (LPARAM)Path1);\r
550                                 else if(strncmp(Str, BMARK_MARK_REMOTE, BMARK_MARK_LEN) == 0)\r
551                                 {\r
552                                         SendDlgItemMessage(hDlg, BEDIT_REMOTE, WM_SETTEXT, 0, (LPARAM)Path1);\r
553                                         /* \83z\83X\83g\91¤\82É\83J\81[\83\\83\8b\82ð\88Ú\93®\82µ\82Ä\82¨\82­ */\r
554                                         SetFocus(GetDlgItem(hDlg, BEDIT_REMOTE));\r
555                                         SendDlgItemMessage(hDlg, BEDIT_REMOTE, EM_SETSEL, 0, -1);\r
556                                         return(FALSE);\r
557                                 }\r
558                                 else if((strncmp(Str, BMARK_MARK_BOTH, BMARK_MARK_LEN) == 0) && (Num == 2))\r
559                                 {\r
560                                         SendDlgItemMessage(hDlg, BEDIT_LOCAL, WM_SETTEXT, 0, (LPARAM)Path1);\r
561                                         SendDlgItemMessage(hDlg, BEDIT_REMOTE, WM_SETTEXT, 0, (LPARAM)Path2);\r
562                                 }\r
563                         }\r
564                         return(TRUE);\r
565 \r
566                 case WM_COMMAND :\r
567                         switch(GET_WM_COMMAND_ID(wParam, lParam))\r
568                         {\r
569                                 case IDOK :\r
570                                         SendDlgItemMessage(hDlg, BEDIT_LOCAL, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Local);\r
571                                         SendDlgItemMessage(hDlg, BEDIT_REMOTE, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Remote);\r
572                                         if(strlen(Local) > 0)\r
573                                         {\r
574                                                 if(strlen(Remote) > 0)\r
575                                                 {\r
576                                                         /* \97¼\95û */\r
577                                                         strcpy(Str, BMARK_MARK_BOTH);\r
578                                                         strcat(Str, Local);\r
579                                                         strcat(Str, BMARK_SEP);\r
580                                                         strcat(Str, Remote);\r
581                                                 }\r
582                                                 else\r
583                                                 {\r
584                                                         /* \83\8d\81[\83J\83\8b\82Ì\82Ý */\r
585                                                         strcpy(Str, BMARK_MARK_LOCAL);\r
586                                                         strcat(Str, Local);\r
587                                                 }\r
588                                                 EndDialog(hDlg, YES);\r
589                                         }\r
590                                         else if(strlen(Remote) > 0)\r
591                                         {\r
592                                                 /* \83z\83X\83g\82Ì\82Ý */\r
593                                                 strcpy(Str, BMARK_MARK_REMOTE);\r
594                                                 strcat(Str, Remote);\r
595                                                 EndDialog(hDlg, YES);\r
596                                         }\r
597                                         else\r
598                                                 EndDialog(hDlg, NO);\r
599                                         break;\r
600 \r
601                                 case IDCANCEL :\r
602                                         EndDialog(hDlg, NO);\r
603                                         break;\r
604                         }\r
605             return(TRUE);\r
606         }\r
607         return(FALSE);\r
608 }\r
609 \r
610 \r