1 /*=============================================================================
\r
3 *
\83t
\83@
\83C
\83\8b\88ê
\97\97\83L
\83\83\83b
\83V
\83\85\r
5 ===============================================================================
\r
6 / Copyright (C) 1997-2007 Sota. All rights reserved.
\r
8 / Redistribution and use in source and binary forms, with or without
\r
9 / modification, are permitted provided that the following conditions
\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
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
31 #include <windows.h>
\r
36 #include <mbstring.h>
\r
38 #include <windowsx.h>
\r
39 #include <commctrl.h>
\r
44 #include "resource.h"
\r
49 static BOOL CALLBACK CountPrevFfftpWindowsProc(HWND hWnd, LPARAM lParam);
\r
53 /*=====
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\82Ì
\83X
\83g
\83\89\83N
\83`
\83\83 =====*/
\r
56 time_t Time; /*
\83\8a\83X
\83g
\82É
\93o
\98^
\82µ
\82½
\8e\9e\8aÔ */
\r
57 char HostAdrs[HOST_ADRS_LEN+1]; /*
\83z
\83X
\83g
\82Ì
\83A
\83h
\83\8c\83X */
\r
58 char UserName[USER_NAME_LEN+1]; /*
\83\86\81[
\83U
\96¼ */
\r
59 char Path[FMAX_PATH+1]; /*
\83p
\83X
\96¼ */
\r
62 /*=====
\83\8d\81[
\83J
\83\8b\82È
\83\8f\81[
\83N =====*/
\r
64 static CACHELIST *RemoteCache = NULL; /*
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^ */
\r
65 static int TmpCacheEntry = 0; /*
\83L
\83\83\83b
\83V
\83\85\82³
\82ê
\82Ä
\82¢
\82é
\83f
\81[
\83^
\82Ì
\90\94 */
\r
66 static int LastNum; /*
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83f
\81[
\83^
\82Ì
\94Ô
\8d\86 */
\r
67 static int ProgNum; /* FFFTP
\82Ì
\8bN
\93®
\94Ô
\8d\86 */
\r
70 /*-----
\83t
\83@
\83C
\83\8b\88ê
\97\97\83L
\83\83\83b
\83V
\83\85\82ð
\8dì
\90¬
\82·
\82é --------------------------------------
\r
73 * int Num :
\83L
\83\83\83b
\83V
\83\85\89Â
\94\
\8cÂ
\90\94\r
76 * int
\83X
\83e
\81[
\83^
\83X
\r
78 *----------------------------------------------------------------------------*/
\r
80 int MakeCacheBuf(int Num)
\r
89 if((RemoteCache = malloc(sizeof(CACHELIST) * Num)) != NULL)
\r
91 TmpCacheEntry = Num;
\r
92 for(i = 0; i < TmpCacheEntry; i++)
\r
101 /*-----
\83t
\83@
\83C
\83\8b\88ê
\97\97\83L
\83\83\83b
\83V
\83\85\82ð
\8dí
\8f\9c\82·
\82é --------------------------------------
\r
108 *----------------------------------------------------------------------------*/
\r
110 void DeleteCacheBuf(void)
\r
112 if(RemoteCache != NULL)
\r
114 RemoteCache = NULL;
\r
120 /*-----
\83p
\83X
\82ª
\83L
\83\83\83b
\83V
\83\85\82³
\82ê
\82Ä
\82¢
\82é
\82©
\82Ç
\82¤
\82©
\82ð
\95Ô
\82· ------------------------------
\r
123 * char *Path :
\83p
\83X
\96¼
\r
126 * int
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\82Ì
\94Ô
\8d\86\r
127 * -1 =
\83L
\83\83\83b
\83V
\83\85\82³
\82ê
\82Ä
\82¢
\82È
\82¢
\r
128 *----------------------------------------------------------------------------*/
\r
130 int AskCached(char *Path)
\r
137 if(TmpCacheEntry > 0)
\r
140 for(i = 0; i < TmpCacheEntry; i++)
\r
142 if((_stricmp(AskHostAdrs(), Pos->HostAdrs) == 0) &&
\r
143 (strcmp(AskHostUserName(), Pos->UserName) == 0) &&
\r
144 (strcmp(Path, Pos->Path) == 0))
\r
146 time(&(Pos->Time)); /* Refresh */
\r
148 // DoPrintf("Filelist cache found. (%d)", Ret);
\r
158 /*-----
\96¢
\8eg
\97p
\82Ì
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\94Ô
\8d\86\82ð
\95Ô
\82· ------------------------------------
\r
164 * int
\96¢
\8eg
\97p
\82Ì
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\94Ô
\8d\86\r
167 *
\96¢
\8eg
\97p
\82Ì
\95¨
\82ª
\96³
\82¢
\8e\9e\82Í
\81A
\88ê
\94Ô
\8cÃ
\82¢
\82à
\82Ì
\82É
\8fã
\8f\91\82«
\82·
\82é
\r
168 *----------------------------------------------------------------------------*/
\r
170 int AskFreeCache(void)
\r
178 if(TmpCacheEntry > 0)
\r
183 for(i = 0; i < TmpCacheEntry; i++)
\r
185 if(strlen(Pos->Path) == 0)
\r
192 if((Ret == -1) || (Pos->Time < Oldest))
\r
194 Oldest = Pos->Time;
\r
201 // DoPrintf("Set filelist cache. (%d)", Ret);
\r
206 /*-----
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\82ð
\83Z
\83b
\83g
\82·
\82é ------------------------------------------
\r
209 * int Num :
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\94Ô
\8d\86\r
210 * char *Path :
\83p
\83X
\96¼
\r
216 *
\8c»
\8dÝ
\90Ú
\91±
\92\86\82Ì
\83z
\83X
\83g
\96¼
\82ð
\8eg
\97p
\82·
\82é
\r
217 *----------------------------------------------------------------------------*/
\r
219 void SetCache(int Num, char *Path)
\r
221 if(TmpCacheEntry > 0)
\r
223 strcpy((RemoteCache + Num)->HostAdrs, AskHostAdrs());
\r
224 strcpy((RemoteCache + Num)->UserName, AskHostUserName());
\r
225 strcpy((RemoteCache + Num)->Path, Path);
\r
226 time(&((RemoteCache + Num)->Time));
\r
232 /*-----
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\82ð
\83N
\83\8a\83A
\82·
\82é ------------------------------------------
\r
235 * int Num :
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\94Ô
\8d\86\r
239 *----------------------------------------------------------------------------*/
\r
241 void ClearCache(int Num)
\r
243 if(TmpCacheEntry > 0)
\r
245 strcpy((RemoteCache + Num)->HostAdrs, "");
\r
246 strcpy((RemoteCache + Num)->UserName, "");
\r
247 strcpy((RemoteCache + Num)->Path, "");
\r
248 (RemoteCache + Num)->Time = 0;
\r
254 /*-----
\8c»
\8dÝ
\95\
\8e¦
\92\86\82Ì
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\94Ô
\8d\86\82ð
\95Ô
\82· --------------------------------
\r
260 * int
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\94Ô
\8d\86\r
261 *----------------------------------------------------------------------------*/
\r
263 int AskCurrentFileListNum(void)
\r
269 /*-----
\8c»
\8dÝ
\95\
\8e¦
\92\86\82Ì
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\94Ô
\8d\86\82ð
\83Z
\83b
\83g
\82·
\82é --------------------------
\r
272 * int Num :
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\94Ô
\8d\86\r
276 *----------------------------------------------------------------------------*/
\r
278 void SetCurrentFileListNum(int Num)
\r
284 /*-----
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\82ð
\95Û
\91¶
\82·
\82é --------------------------------------------
\r
293 *
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\82»
\82Ì
\82à
\82Ì
\82Í
\83t
\83@
\83C
\83\8b\82É
\82È
\82Á
\82Ä
\82¢
\82é
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\82Í
\83C
\83\93\83f
\83b
\83N
\r
294 *
\83X
\83t
\83@
\83C
\83\8b\82ð
\8dì
\90¬
\82·
\82é
\81B
\r
295 *
\82Ü
\82½
\81A
\95s
\97v
\82È
\83t
\83@
\83C
\83\8b\82Í
\8dí
\8f\9c\82·
\82é
\81B
\r
296 *----------------------------------------------------------------------------*/
\r
298 void SaveCache(void)
\r
300 char Buf[FMAX_PATH+1];
\r
305 if(ProgNum == 0) /*
\8dÅ
\8f\89\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
\82¾
\82¯
\82ª
\83L
\83\83\83b
\83V
\83\85\82ð
\95Û
\91¶
\82Å
\82«
\82é */
\r
307 if(TmpCacheEntry > 0)
\r
309 strcpy(Buf, AskTmpFilePath());
\r
311 strcat(Buf, "_ffftp.idx");
\r
312 if((fd = fopen(Buf, "wt"))!=NULL)
\r
315 for(i = 0; i < TmpCacheEntry; i++)
\r
317 if(strlen(Pos->Path) != 0)
\r
318 fprintf(fd, "%s %s %s %ld\n", Pos->HostAdrs, Pos->UserName, Pos->Path, Pos->Time);
\r
328 MakeCacheFileName(998, Buf);
\r
331 MakeCacheFileName(999, Buf);
\r
338 /*-----
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\82ð
\93Ç
\82Ý
\8d\9e\82Þ --------------------------------------------
\r
345 *----------------------------------------------------------------------------*/
\r
347 void LoadCache(void)
\r
349 char Buf[FMAX_PATH+1];
\r
354 if(ProgNum == 0) /*
\8dÅ
\8f\89\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
\82¾
\82¯
\82ª
\83L
\83\83\83b
\83V
\83\85\82ð
\95Û
\91¶
\82Å
\82«
\82é */
\r
356 if(TmpCacheEntry > 0)
\r
358 strcpy(Buf, AskTmpFilePath());
\r
360 strcat(Buf, "_ffftp.idx");
\r
361 if((fd = fopen(Buf, "rt"))!=NULL)
\r
365 while(Num < TmpCacheEntry)
\r
367 if(fgets(Buf, FMAX_PATH, fd) == NULL)
\r
370 if(sscanf(Buf, "%s %s %s %ld\n", Pos->HostAdrs, Pos->UserName, Pos->Path, &(Pos->Time)) == 4)
\r
386 /*-----
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\82ð
\91S
\82Ä
\8dí
\8f\9c\82·
\82é ----------------------------------------
\r
393 *----------------------------------------------------------------------------*/
\r
395 void DeleteCache(void)
\r
397 char Buf[FMAX_PATH+1];
\r
402 strcpy(Buf, AskTmpFilePath());
\r
404 strcat(Buf, "_ffftp.idx");
\r
408 for(i = 0; i <= TmpCacheEntry; i++)
\r
410 MakeCacheFileName(i, Buf);
\r
414 MakeCacheFileName(998, Buf);
\r
417 MakeCacheFileName(999, Buf);
\r
424 /*-----
\83L
\83\83\83b
\83V
\83\85\82Ì
\83t
\83@
\83C
\83\8b\96¼
\82ð
\8dì
\90¬
\82·
\82é --------------------------------------
\r
427 * int Num :
\83L
\83\83\83b
\83V
\83\85\83f
\81[
\83^
\94Ô
\8d\86\r
428 * char *Buf :
\83t
\83@
\83C
\83\8b\96¼
\82ð
\8ai
\94[
\82·
\82é
\83o
\83b
\83t
\83@
\r
432 *----------------------------------------------------------------------------*/
\r
434 void MakeCacheFileName(int Num, char *Buf)
\r
439 strcpy(Buf, AskTmpFilePath());
\r
441 Pos = strchr(Buf, NUL);
\r
445 sprintf(Prog, ".%d", ProgNum);
\r
447 sprintf(Pos, "_ffftp.%03d%s", Num, Prog);
\r
452 /*-----
\8bN
\93®
\82µ
\82Ä
\82¢
\82éFFFTP
\82Ì
\90\94\82ð
\90\94\82¦
\82é ------------------------------------------
\r
461 *
\8cÂ
\90\94\82ÍProgNum
\82É
\8ai
\94[
\82·
\82é
\r
462 *----------------------------------------------------------------------------*/
\r
464 void CountPrevFfftpWindows(void)
\r
467 EnumWindows(CountPrevFfftpWindowsProc, 0);
\r
472 /*-----
\8bN
\93®
\82µ
\82Ä
\82¢
\82éFFFTP
\82Ì
\90\94\82ð
\90\94\82¦
\82é
\83R
\81[
\83\8b\83o
\83b
\83N-------------------------------
\r
475 * HWND hWnd :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
476 * LPARAM lParam :
\83p
\83\89\83\81\81[
\83^
\r
480 *----------------------------------------------------------------------------*/
\r
482 static BOOL CALLBACK CountPrevFfftpWindowsProc(HWND hWnd, LPARAM lParam)
\r
484 char Buf[FMAX_PATH+1];
\r
486 if(GetClassName(hWnd, Buf, FMAX_PATH) > 0)
\r
488 if(strcmp(Buf, "FFFTPWin") == 0)
\r