1 /*=============================================================================
\r
3 *
\83t
\83@
\83C
\83\8b\88ê
\97\97\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
30 #define _WIN32_WINNT 0x400
\r
33 #include <windows.h>
\r
39 #include <mbstring.h>
\r
41 #include <windowsx.h>
\r
42 #include <commctrl.h>
\r
43 #include <sys/types.h>
\r
44 #include <sys/stat.h>
\r
48 #include "resource.h"
\r
50 #include <htmlhelp.h>
\r
54 #include "OleDragDrop.h"
\r
57 #define BUF_SIZE 256
\r
59 #define WM_DRAGDROP (WM_APP + 100)
\r
60 #define WM_GETDATA (WM_APP + 101)
\r
61 #define WM_DRAGOVER (WM_APP + 102)
\r
64 /*=====
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\83\8a\83X
\83g
\97p
\83X
\83g
\83\89\83N
\83`
\83\83 =====*/
\r
67 FILELIST *Top; /*
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\90æ
\93ª */
\r
68 int Files; /*
\83t
\83@
\83C
\83\8b\82Ì
\90\94 */
\r
71 /*=====
\83v
\83\8d\83g
\83^
\83C
\83v =====*/
\r
73 static LRESULT CALLBACK LocalWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
\r
74 static LRESULT CALLBACK RemoteWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
\r
75 static LRESULT FileListCommonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
\r
76 static void AddDispFileList(FLISTANCHOR *Anchor, char *Name, FILETIME *Time, LONGLONG Size, int Attr, int Type, int Link, char *Owner, int InfoExist, int Win);
\r
77 static void EraseDispFileList(FLISTANCHOR *Anchor);
\r
78 static void DispFileList2View(HWND hWnd, FLISTANCHOR *Anchor);
\r
79 static void AddListView(HWND hWnd, int Pos, char *Name, int Type, LONGLONG Size, FILETIME *Time, int Attr, char *Owner, int Link, int InfoExist);
\r
80 static BOOL CALLBACK SelectDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
81 static void DispListList(FILELIST *Pos, char *Title);
\r
82 static void MakeRemoteTree1(char *Path, char *Cur, FILELIST **Base, int *CancelCheckWork);
\r
83 static void MakeRemoteTree2(char *Path, char *Cur, FILELIST **Base, int *CancelCheckWork);
\r
84 static void CopyTmpListToFileList(FILELIST **Base, FILELIST *List);
\r
85 static int GetListOneLine(char *Buf, int Max, FILE *Fd);
\r
86 static int MakeDirPath(char *Str, int ListType, char *Path, char *Dir);
\r
87 static void MakeLocalTree(char *Path, FILELIST **Base);
\r
88 static void AddFileList(FILELIST *Pkt, FILELIST **Base);
\r
89 static int AnalizeFileInfo(char *Str);
\r
90 static int CheckUnixType(char *Str, char *Tmp, int Add1, int Add2, int Day);
\r
91 static int CheckHHMMformat(char *Str);
\r
92 static int CheckYYMMDDformat(char *Str, char Sym, int Dig3);
\r
93 static int CheckYYYYMMDDformat(char *Str, char Sym);
\r
94 static int ResolvFileInfo(char *Str, int ListType, char *Fname, LONGLONG *Size, FILETIME *Time, int *Attr, char *Owner, int *Link, int *InfoExist);
\r
95 static int FindField(char *Str, char *Buf, int Num, int ToLast);
\r
96 static void GetMonth(char *Str, WORD *Month, WORD *Day);
\r
97 static int GetYearMonthDay(char *Str, WORD *Year, WORD *Month, WORD *Day);
\r
98 static int GetHourAndMinute(char *Str, WORD *Hour, WORD *Minute);
\r
99 static int GetVMSdate(char *Str, WORD *Year, WORD *Month, WORD *Day);
\r
100 static int CheckSpecialDirName(char *Fname);
\r
101 static int AskFilterStr(char *Fname, int Type);
\r
102 static BOOL CALLBACK FilterWndProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
103 static int atoi_n(const char *Str, int Len);
\r
105 /*=====
\8aO
\95\94\8eQ
\8fÆ =====*/
\r
107 extern int SepaWidth;
\r
108 extern int RemoteWidth;
\r
109 extern int ListHeight;
\r
110 extern char FilterStr[FILTER_EXT_LEN+1];
\r
111 extern HWND hHelpWin;
\r
114 extern int LocalWidth;
\r
115 extern int LocalTabWidth[4];
\r
116 extern int RemoteTabWidth[6];
\r
117 extern char UserMailAdrs[USER_MAIL_LEN+1];
\r
118 extern HFONT ListFont;
\r
119 extern int ListType;
\r
120 extern int FindMode;
\r
121 extern int DotFile;
\r
122 extern int DispIgnoreHide;
\r
123 extern int DispDrives;
\r
124 extern int MoveMode;
\r
126 /*=====
\83\8d\81[
\83J
\83\8b\82È
\83\8f\81[
\83N =====*/
\r
128 static HWND hWndListLocal = NULL;
\r
129 static HWND hWndListRemote = NULL;
\r
131 static WNDPROC LocalProcPtr;
\r
132 static WNDPROC RemoteProcPtr;
\r
134 static HIMAGELIST ListImg = NULL;
\r
136 static char FindStr[40+1] = { "*" }; /*
\8c\9f\8dõ
\95¶
\8e\9a\97ñ */
\r
137 static int IgnoreNew = NO;
\r
138 static int IgnoreOld = NO;
\r
139 static int IgnoreExist = NO;
\r
141 static int Dragging = NO;
\r
143 static int StratusMode; /* 0=
\83t
\83@
\83C
\83\8b, 1=
\83f
\83B
\83\8c\83N
\83g
\83\8a, 2=
\83\8a\83\93\83N */
\r
146 //
\83\8a\83\82\81[
\83g
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g (2007.9.3 yutaka)
\r
147 static FILELIST *remoteFileListBase;
\r
148 static FILELIST *remoteFileListBaseNoExpand;
\r
149 static char remoteFileDir[FMAX_PATH + 1];
\r
152 /*-----
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\83E
\83C
\83\93\83h
\83E
\82ð
\8dì
\90¬
\82·
\82é ------------------------------------
\r
155 * HWND hWnd :
\90e
\83E
\83C
\83\93\83h
\83E
\82Ì
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
156 * HINSTANCE hInst :
\83C
\83\93\83X
\83^
\83\93\83X
\83n
\83\93\83h
\83\8b\r
159 * int
\83X
\83e
\81[
\83^
\83X
\r
161 *----------------------------------------------------------------------------*/
\r
163 int MakeListWin(HWND hWnd, HINSTANCE hInst)
\r
169 /*=====
\83\8d\81[
\83J
\83\8b\91¤
\82Ì
\83\8a\83X
\83g
\83r
\83\85\81[ =====*/
\r
171 hWndListLocal = CreateWindowEx(/*WS_EX_STATICEDGE*/WS_EX_CLIENTEDGE,
\r
172 WC_LISTVIEWA, NULL,
\r
173 WS_CHILD | /*WS_BORDER | */LVS_REPORT | LVS_SHOWSELALWAYS,
\r
174 0, TOOLWIN_HEIGHT*2, LocalWidth, ListHeight,
\r
175 GetMainHwnd(), (HMENU)1500, hInst, NULL);
\r
177 if(hWndListLocal != NULL)
\r
179 LocalProcPtr = (WNDPROC)SetWindowLong(hWndListLocal, GWL_WNDPROC, (LONG)LocalWndProc);
\r
181 Tmp = SendMessage(hWndListLocal, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
\r
182 Tmp |= LVS_EX_FULLROWSELECT;
\r
183 SendMessage(hWndListLocal, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)Tmp);
\r
185 if(ListFont != NULL)
\r
186 SendMessage(hWndListLocal, WM_SETFONT, (WPARAM)ListFont, MAKELPARAM(TRUE, 0));
\r
188 ListImg = ImageList_LoadBitmap(hInst, MAKEINTRESOURCE(dirattr_bmp), 16, 9, RGB(255,0,0));
\r
189 SendMessage(hWndListLocal, LVM_SETIMAGELIST, LVSIL_SMALL, (LPARAM)ListImg);
\r
190 ShowWindow(hWndListLocal, SW_SHOW);
\r
192 LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
\r
193 LvCol.cx = LocalTabWidth[0];
\r
194 LvCol.pszText = MSGJPN038;
\r
195 LvCol.iSubItem = 0;
\r
196 SendMessage(hWndListLocal, LVM_INSERTCOLUMN, 0, (LPARAM)&LvCol);
\r
198 LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
\r
199 LvCol.cx = LocalTabWidth[1];
\r
200 LvCol.pszText = MSGJPN039;
\r
201 LvCol.iSubItem = 1;
\r
202 SendMessage(hWndListLocal, LVM_INSERTCOLUMN, 1, (LPARAM)&LvCol);
\r
204 LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_FMT;
\r
205 LvCol.fmt = LVCFMT_RIGHT;
\r
206 LvCol.cx = LocalTabWidth[2];
\r
207 LvCol.pszText = MSGJPN040;
\r
208 LvCol.iSubItem = 2;
\r
209 SendMessage(hWndListLocal, LVM_INSERTCOLUMN, 2, (LPARAM)&LvCol);
\r
211 LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
\r
212 LvCol.cx = LocalTabWidth[3];
\r
213 LvCol.pszText = MSGJPN041;
\r
214 LvCol.iSubItem = 3;
\r
215 SendMessage(hWndListLocal, LVM_INSERTCOLUMN, 3, (LPARAM)&LvCol);
\r
218 /*=====
\83z
\83X
\83g
\91¤
\82Ì
\83\8a\83X
\83g
\83r
\83\85\81[ =====*/
\r
220 hWndListRemote = CreateWindowEx(/*WS_EX_STATICEDGE*/WS_EX_CLIENTEDGE,
\r
221 WC_LISTVIEWA, NULL,
\r
222 WS_CHILD | /*WS_BORDER | */LVS_REPORT | LVS_SHOWSELALWAYS,
\r
223 LocalWidth + SepaWidth, TOOLWIN_HEIGHT*2, RemoteWidth, ListHeight,
\r
224 GetMainHwnd(), (HMENU)1500, hInst, NULL);
\r
226 if(hWndListRemote != NULL)
\r
228 RemoteProcPtr = (WNDPROC)SetWindowLong(hWndListRemote, GWL_WNDPROC, (LONG)RemoteWndProc);
\r
230 Tmp = SendMessage(hWndListRemote, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
\r
231 Tmp |= LVS_EX_FULLROWSELECT;
\r
232 SendMessage(hWndListRemote, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)Tmp);
\r
234 if(ListFont != NULL)
\r
235 SendMessage(hWndListRemote, WM_SETFONT, (WPARAM)ListFont, MAKELPARAM(TRUE, 0));
\r
237 SendMessage(hWndListRemote, LVM_SETIMAGELIST, LVSIL_SMALL, (LPARAM)ListImg);
\r
238 ShowWindow(hWndListRemote, SW_SHOW);
\r
240 LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
\r
241 LvCol.cx = RemoteTabWidth[0];
\r
242 LvCol.pszText = MSGJPN042;
\r
243 LvCol.iSubItem = 0;
\r
244 SendMessage(hWndListRemote, LVM_INSERTCOLUMN, 0, (LPARAM)&LvCol);
\r
246 LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
\r
247 LvCol.cx = RemoteTabWidth[1];
\r
248 LvCol.pszText = MSGJPN043;
\r
249 LvCol.iSubItem = 1;
\r
250 SendMessage(hWndListRemote, LVM_INSERTCOLUMN, 1, (LPARAM)&LvCol);
\r
252 LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_FMT;
\r
253 LvCol.fmt = LVCFMT_RIGHT;
\r
254 LvCol.cx = RemoteTabWidth[2];
\r
255 LvCol.pszText = MSGJPN044;
\r
256 LvCol.iSubItem = 2;
\r
257 SendMessage(hWndListRemote, LVM_INSERTCOLUMN, 2, (LPARAM)&LvCol);
\r
259 LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
\r
260 LvCol.cx = RemoteTabWidth[3];
\r
261 LvCol.pszText = MSGJPN045;
\r
262 LvCol.iSubItem = 3;
\r
263 SendMessage(hWndListRemote, LVM_INSERTCOLUMN, 3, (LPARAM)&LvCol);
\r
265 LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
\r
266 LvCol.cx = RemoteTabWidth[4];
\r
267 LvCol.pszText = MSGJPN046;
\r
268 LvCol.iSubItem = 4;
\r
269 SendMessage(hWndListRemote, LVM_INSERTCOLUMN, 4, (LPARAM)&LvCol);
\r
271 LvCol.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
\r
272 LvCol.cx = RemoteTabWidth[5];
\r
273 LvCol.pszText = MSGJPN047;
\r
274 LvCol.iSubItem = 5;
\r
275 SendMessage(hWndListRemote, LVM_INSERTCOLUMN, 5, (LPARAM)&LvCol);
\r
279 if((hWndListLocal == NULL) ||
\r
280 (hWndListRemote == NULL))
\r
288 /*-----
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\83E
\83C
\83\93\83h
\83E
\82ð
\8dí
\8f\9c ----------------------------------------
\r
295 *----------------------------------------------------------------------------*/
\r
297 void DeleteListWin(void)
\r
299 // if(ListImg != NULL)
\r
300 // ImageList_Destroy(ListImg);
\r
301 if(hWndListLocal != NULL)
\r
302 DestroyWindow(hWndListLocal);
\r
303 if(hWndListRemote != NULL)
\r
304 DestroyWindow(hWndListRemote);
\r
309 /*-----
\83\8d\81[
\83J
\83\8b\91¤
\82Ì
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\82ð
\95Ô
\82· ------------------
\r
315 * HWND
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
316 *----------------------------------------------------------------------------*/
\r
318 HWND GetLocalHwnd(void)
\r
320 return(hWndListLocal);
\r
324 /*-----
\83z
\83X
\83g
\91¤
\82Ì
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\82ð
\95Ô
\82· --------------------
\r
330 * HWND
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
331 *----------------------------------------------------------------------------*/
\r
333 HWND GetRemoteHwnd(void)
\r
335 return(hWndListRemote);
\r
339 /*-----
\83\8d\81[
\83J
\83\8b\91¤
\82Ì
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\83E
\83C
\83\93\83h
\83E
\82Ì
\83\81\83b
\83Z
\81[
\83W
\8f\88\97\9d ------------------
\r
342 * HWND hWnd :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
343 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
344 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
345 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
348 *
\83\81\83b
\83Z
\81[
\83W
\82É
\91Î
\89\9e\82·
\82é
\96ß
\82è
\92l
\r
349 *----------------------------------------------------------------------------*/
\r
351 static LRESULT CALLBACK LocalWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
\r
353 return(FileListCommonWndProc(hWnd, message, wParam, lParam));
\r
357 /*-----
\83z
\83X
\83g
\91¤
\82Ì
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\83E
\83C
\83\93\83h
\83E
\82Ì
\83\81\83b
\83Z
\81[
\83W
\8f\88\97\9d --------------------
\r
360 * HWND hWnd :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
361 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
362 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
363 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
366 *
\83\81\83b
\83Z
\81[
\83W
\82É
\91Î
\89\9e\82·
\82é
\96ß
\82è
\92l
\r
367 *----------------------------------------------------------------------------*/
\r
369 static LRESULT CALLBACK RemoteWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
\r
371 return(FileListCommonWndProc(hWnd, message, wParam, lParam));
\r
375 //
\83_
\83C
\83A
\83\8d\83O
\83v
\83\8d\83V
\81[
\83W
\83\83\r
376 static BOOL CALLBACK doOleDlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
\r
378 #define TIMER_ID (100) //
\8dì
\90¬
\82·
\82é
\83^
\83C
\83}
\82Ì
\8e¯
\95ÊID
\r
379 #define TIMER_ELAPSE (100) // WM_TIMER
\82Ì
\94
\90¶
\8aÔ
\8au
\r
383 case WM_INITDIALOG: //
\83_
\83C
\83A
\83\8d\83O
\83{
\83b
\83N
\83X
\82ª
\8dì
\90¬
\82³
\82ê
\82½
\82Æ
\82«
\r
384 SetTimer( hDlg, TIMER_ID, 0, NULL);
\r
388 ShowWindow(hDlg, SW_HIDE); //
\83_
\83C
\83A
\83\8d\83O
\82Í
\89B
\82·
\r
390 if (wp != TIMER_ID)
\r
393 if (PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) {
\r
394 TranslateMessage(&message);
\r
395 DispatchMessage(&message);
\r
398 if (AskTransferNow() == NO) {
\r
399 EndDialog( hDlg, 0 );
\r
404 SetTimer( hDlg, TIMER_ID, TIMER_ELAPSE, NULL );
\r
407 case WM_COMMAND: //
\83_
\83C
\83A
\83\8d\83O
\83{
\83b
\83N
\83X
\93à
\82Ì
\89½
\82©
\82ª
\91I
\91ð
\82³
\82ê
\82½
\82Æ
\82«
\r
408 switch( LOWORD( wp ) ){
\r
409 // case IDOK: //
\81uOK
\81v
\83{
\83^
\83\93\82ª
\91I
\91ð
\82³
\82ê
\82½
\r
410 case IDCANCEL: //
\81u
\83L
\83\83\83\93\83Z
\83\8b\81v
\83{
\83^
\83\93\82ª
\91I
\91ð
\82³
\82ê
\82½
\r
411 //
\83_
\83C
\83A
\83\8d\83O
\83{
\83b
\83N
\83X
\82ð
\8fÁ
\82·
\r
412 EndDialog( hDlg, 0 );
\r
418 return FALSE; // DefWindowProc()
\82Å
\82Í
\82È
\82
\81AFALSE
\82ð
\95Ô
\82·
\82±
\82Æ
\81I
\r
420 #undef TIMER_ELAPSE
\r
424 static void doTransferRemoteFile(void)
\r
426 FILELIST *FileListBase, *FileListBaseNoExpand, *pf;
\r
427 int CancelFlg = NO;
\r
428 char LocDir[FMAX_PATH+1];
\r
429 char TmpDir[FMAX_PATH+1];
\r
434 //
\82·
\82Å
\82É
\83\8a\83\82\81[
\83g
\82©
\82ç
\93]
\91\97\8dÏ
\82Ý
\82È
\82ç
\89½
\82à
\82µ
\82È
\82¢
\81B(2007.9.3 yutaka)
\r
435 if (remoteFileListBase != NULL)
\r
438 FileListBase = NULL;
\r
439 MakeSelectedFileList(WIN_REMOTE, YES, NO, &FileListBase, &CancelFlg);
\r
440 FileListBaseNoExpand = NULL;
\r
441 MakeSelectedFileList(WIN_REMOTE, NO, NO, &FileListBaseNoExpand, &CancelFlg);
\r
443 // set temporary folder
\r
444 AskLocalCurDir(LocDir, FMAX_PATH);
\r
446 //
\83A
\83v
\83\8a\82ð
\91½
\8fd
\8bN
\93®
\82µ
\82Ä
\82à
\83R
\83\93\83t
\83\8a\83N
\83g
\82µ
\82È
\82¢
\82æ
\82¤
\82É
\81A
\83e
\83\93\83|
\83\89\83\8a\83t
\83H
\83\8b\83_
\96¼
\82É
\83v
\83\8d\83Z
\83XID
\r
447 //
\82ð
\95t
\89Á
\82·
\82é
\81B(2007.9.13 yutaka)
\r
448 GetTempPath(sizeof(TmpDir), TmpDir);
\r
449 pid = GetCurrentProcessId();
\r
450 _snprintf_s(buf, sizeof(buf), _TRUNCATE, "ffftp%d", pid);
\r
451 strncat_s(TmpDir, sizeof(TmpDir), buf, _TRUNCATE);
\r
454 if (TmpDir[strlen(TmpDir) - 1] == '\\') {
\r
455 TmpDir[strlen(TmpDir) - 1] = '\0';
\r
459 //
\8aù
\91¶
\82Ì
\83t
\83@
\83C
\83\8b\82ð
\8dí
\8f\9c\82·
\82é
\r
460 for (pf = FileListBase ; pf ; pf = pf->Next) {
\r
461 char fn[FMAX_PATH+1];
\r
463 strncpy_s(fn, sizeof(fn), TmpDir, _TRUNCATE);
\r
464 strncat_s(fn, sizeof(fn), "\\", _TRUNCATE);
\r
465 strncat_s(fn, sizeof(fn), pf->File, _TRUNCATE);
\r
470 //
\83_
\83E
\83\93\83\8d\81[
\83h
\90æ
\82ð
\83e
\83\93\83|
\83\89\83\8a\82É
\90Ý
\92è
\r
471 SetLocalDirHist(TmpDir);
\r
473 // FFFTP
\82É
\83_
\83E
\83\93\83\8d\81[
\83h
\97v
\8b\81\82ð
\8fo
\82µ
\81A
\83_
\83E
\83\93\83\8d\81[
\83h
\82Ì
\8a®
\97¹
\82ð
\91Ò
\82Â
\81B
\r
474 PostMessage(GetMainHwnd(), WM_COMMAND, MAKEWPARAM(MENU_DOWNLOAD, 0), 0);
\r
476 for (i = 0 ; i < 10 ; i++) {
\r
479 if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
\r
480 TranslateMessage(&msg);
\r
481 DispatchMessage(&msg);
\r
484 //
\93]
\91\97\83X
\83\8c\83b
\83h
\82ª
\93®
\82«
\8fo
\82µ
\82½
\82ç
\94²
\82¯
\82é
\81B
\r
485 if (AskTransferNow() == YES)
\r
492 // OLE D&D
\92\86\82É
\83\81\83C
\83\93\83E
\83B
\83\93\83h
\83E
\82ð
\83\86\81[
\83U
\82É
\91\80\8dì
\82³
\82¹
\82é
\82Æ
\81A
\82¨
\82©
\82µ
\82
\82È
\82é
\82Ì
\82Å
\81A
\r
493 //
\89B
\82µ
\83\82\81[
\83_
\83\8b\83_
\83C
\83A
\83\8d\83O
\82ð
\8dì
\82é
\81B
\r
494 // (2007.9.11 yutaka)
\r
495 DialogBox(GetFtpInst(), MAKEINTRESOURCE(IDD_OLEDRAG), GetMainHwnd(), (DLGPROC)doOleDlgProc);
\r
497 //
\83_
\83E
\83\93\83\8d\81[
\83h
\90æ
\82ð
\8c³
\82É
\96ß
\82·
\r
498 SetLocalDirHist(LocDir);
\r
499 SetCurrentDirAsDirHist();
\r
501 remoteFileListBase = FileListBase; //
\82 \82Æ
\82Å
\83t
\83\8a\81[
\82·
\82é
\82±
\82Æ
\r
502 remoteFileListBaseNoExpand = FileListBaseNoExpand; //
\82 \82Æ
\82Å
\83t
\83\8a\81[
\82·
\82é
\82±
\82Æ
\r
503 strncpy_s(remoteFileDir, sizeof(remoteFileDir), TmpDir, _TRUNCATE);
\r
506 // add temporary list
\r
507 if (remoteFileListBase != NULL) {
\r
508 FILELIST *pf = remoteFileListBase;
\r
509 char fn[FMAX_PATH + 1];
\r
511 strncpy_s(fn, sizeof(fn), remoteFileDir, _TRUNCATE);
\r
512 strncat_s(fn, sizeof(fn), "\\", _TRUNCATE);
\r
513 strncat_s(fn, sizeof(fn), pf->File, _TRUNCATE);
\r
514 AddTempFileList(fn);
\r
522 int isDirectory(char *fn)
\r
526 if (_stat(fn, &buf) == 0) {
\r
527 if (buf.st_mode & _S_IFDIR) { // is directory
\r
534 //
\83e
\83\93\83|
\83\89\83\8a\82Ì
\83t
\83@
\83C
\83\8b\82¨
\82æ
\82Ñ
\83t
\83H
\83\8b\83_
\82ð
\8dí
\8f\9c\82·
\82é
\81B
\r
535 void doDeleteRemoteFile(void)
\r
537 if (remoteFileListBase != NULL) {
\r
541 FILELIST *pf = remoteFileListBase;
\r
542 char fn[FMAX_PATH + 1];
\r
544 strncpy_s(fn, sizeof(fn), remoteFileDir, _TRUNCATE);
\r
545 strncat_s(fn, sizeof(fn), "\\", _TRUNCATE);
\r
546 strncat_s(fn, sizeof(fn), pf->File, _TRUNCATE);
\r
547 if (isDirectory(fn)) {
\r
556 for (i = 0 ; i < 1000 ; i++) {
\r
557 pf = remoteFileListBase;
\r
559 strncpy_s(fn, sizeof(fn), remoteFileDir, _TRUNCATE);
\r
560 strncat_s(fn, sizeof(fn), "\\", _TRUNCATE);
\r
561 strncat_s(fn, sizeof(fn), pf->File, _TRUNCATE);
\r
562 if (isDirectory(fn)) {
\r
563 if (_rmdir(fn) == 0) { //
\83f
\83B
\83\8c\83N
\83g
\83\8a\82ð
\8fÁ
\82¹
\82½
\82ç
\83J
\83E
\83\93\83g
\83A
\83b
\83v
\r
565 if (count >= dirs) //
\82·
\82×
\82Ä
\8fÁ
\82¹
\82½
\82ç
\8fI
\82í
\82è
\r
573 _rmdir(remoteFileDir); //
\8e©
\95ª
\82Å
\8dì
\82Á
\82½
\83f
\83B
\83\8c\83N
\83g
\83\8a\82à
\8fÁ
\82·
\r
575 SHFILEOPSTRUCT FileOp = { NULL, FO_DELETE, remoteFileDir, NULL,
\r
576 FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI,
\r
577 FALSE, NULL, NULL };
\r
578 SHFileOperation(&FileOp);
\r
581 DeleteFileList(&remoteFileListBase);
\r
582 remoteFileListBase = NULL;
\r
585 if (remoteFileListBaseNoExpand != NULL) {
\r
586 DeleteFileList(&remoteFileListBaseNoExpand);
\r
587 remoteFileListBaseNoExpand = NULL;
\r
593 // cf. http://www.nakka.com/lib/
\r
594 /*
\83h
\83\8d\83b
\83v
\83t
\83@
\83C
\83\8b\82Ì
\8dì
\90¬ */
\r
595 static HDROP APIPRIVATE CreateDropFileMem(char **FileName,int cnt,BOOL fWide)
\r
598 LPDROPFILES lpDropFile;
\r
599 wchar_t wbuf[BUF_SIZE];
\r
604 /*
\83\8f\83C
\83h
\83L
\83\83\83\89 */
\r
605 for(i = 0;i < cnt;i++){
\r
606 MultiByteToWideChar(CP_ACP,0,FileName[i],-1,wbuf,BUF_SIZE);
\r
607 flen += (wcslen(wbuf) + 1) * sizeof(wchar_t);
\r
611 /*
\83}
\83\8b\83`
\83o
\83C
\83g */
\r
612 for(i = 0;i < cnt;i++){
\r
613 flen += lstrlen(FileName[i]) + 1;
\r
617 hDrop = (HDROP)GlobalAlloc(GHND,sizeof(DROPFILES) + flen + 1);
\r
618 if (hDrop == NULL){
\r
622 lpDropFile = (LPDROPFILES) GlobalLock(hDrop);
\r
623 lpDropFile->pFiles = sizeof(DROPFILES); /*
\83t
\83@
\83C
\83\8b\96¼
\82Ì
\83\8a\83X
\83g
\82Ü
\82Å
\82Ì
\83I
\83t
\83Z
\83b
\83g */
\r
624 lpDropFile->pt.x = 0;
\r
625 lpDropFile->pt.y = 0;
\r
626 lpDropFile->fNC = FALSE;
\r
627 lpDropFile->fWide = fWide; /*
\83\8f\83C
\83h
\83L
\83\83\83\89\82Ì
\8fê
\8d\87\82Í TRUE */
\r
629 /*
\8d\
\91¢
\91Ì
\82Ì
\8cã
\82ë
\82É
\83t
\83@
\83C
\83\8b\96¼
\82Ì
\83\8a\83X
\83g
\82ð
\83R
\83s
\81[
\82·
\82é
\81B(
\83t
\83@
\83C
\83\8b\96¼\0
\83t
\83@
\83C
\83\8b\96¼\0
\83t
\83@
\83C
\83\8b\96¼\0\0) */
\r
631 /*
\83\8f\83C
\83h
\83L
\83\83\83\89 */
\r
634 buf = (wchar_t *)(&lpDropFile[1]);
\r
635 for(i = 0;i < cnt;i++){
\r
636 MultiByteToWideChar(CP_ACP,0,FileName[i],-1,wbuf,BUF_SIZE);
\r
638 buf += wcslen(wbuf) + 1;
\r
641 /*
\83}
\83\8b\83`
\83o
\83C
\83g */
\r
644 buf = (char *)(&lpDropFile[1]);
\r
645 for(i = 0;i < cnt;i++){
\r
646 lstrcpy(buf,FileName[i]);
\r
647 buf += lstrlen(FileName[i]) + 1;
\r
651 GlobalUnlock(hDrop);
\r
656 // OLE D&D
\82ð
\8aJ
\8en
\82·
\82é
\r
657 // (2007.8.30 yutaka)
\r
658 static void doDragDrop(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
\r
664 //
\83e
\83\93\83|
\83\89\83\8a\82ð
\82«
\82ê
\82¢
\82É
\82·
\82é (2007.9.3 yutaka)
\r
665 doDeleteRemoteFile();
\r
667 /*
\83h
\83\89\83b
\83O&
\83h
\83\8d\83b
\83v
\82Ì
\8aJ
\8en */
\r
669 cf[1] = CF_HDROP; /*
\83t
\83@
\83C
\83\8b */
\r
670 if((ret = OLE_IDropSource_Start(hWnd,WM_GETDATA, WM_DRAGOVER, cf,1,DROPEFFECT_COPY | DROPEFFECT_MOVE | DROPEFFECT_LINK)) == DROPEFFECT_MOVE){
\r
673 //
\83h
\83\8d\83b
\83v
\90æ
\82Ì
\83A
\83v
\83\8a\82É WM_LBUTTONUP
\82ð
\94ò
\82Î
\82·
\81B
\r
675 ScreenToClient(hWnd, &pt);
\r
676 PostMessage(hWnd,WM_LBUTTONUP,0,MAKELPARAM(pt.x,pt.y));
\r
681 /*-----
\83t
\83@
\83C
\83\8b\88ê
\97\97\83E
\83C
\83\93\83h
\83E
\82Ì
\8b¤
\92Ê
\83\81\83b
\83Z
\81[
\83W
\8f\88\97\9d ----------------------------
\r
684 * HWND hWnd :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
685 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
686 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
687 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
690 *
\83\81\83b
\83Z
\81[
\83W
\82É
\91Î
\89\9e\82·
\82é
\96ß
\82è
\92l
\r
691 *----------------------------------------------------------------------------*/
\r
693 static LRESULT FileListCommonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
\r
698 static HCURSOR hCsrDrg;
\r
699 static HCURSOR hCsrNoDrg;
\r
700 static POINT DragPoint;
\r
701 static HWND hWndDragStart;
\r
702 static int RemoteDropFileIndex = -1;
\r
709 hWndDst = hWndListRemote;
\r
710 ProcPtr = LocalProcPtr;
\r
711 hWndHistEdit = GetLocalHistEditHwnd();
\r
712 if(hWnd == hWndListRemote)
\r
715 hWndDst = hWndListLocal;
\r
716 ProcPtr = RemoteProcPtr;
\r
717 hWndHistEdit = GetRemoteHistEditHwnd();
\r
722 case WM_SYSKEYDOWN:
\r
723 if (wParam == 'D') { // Alt+D
\r
724 SetFocus(hWndHistEdit);
\r
727 EraseListViewTips();
\r
728 return(CallWindowProc(ProcPtr, hWnd, message, wParam, lParam));
\r
736 EraseListViewTips();
\r
737 return(CallWindowProc(ProcPtr, hWnd, message, wParam, lParam));
\r
740 SetFocusHwnd(hWnd);
\r
741 MakeButtonsFocus();
\r
742 DispCurrentWindow(Win);
\r
743 DispSelectedSpace();
\r
744 return(CallWindowProc(ProcPtr, hWnd, message, wParam, lParam));
\r
746 case WM_KILLFOCUS :
\r
747 EraseListViewTips();
\r
748 MakeButtonsFocus();
\r
749 DispCurrentWindow(-1);
\r
750 return(CallWindowProc(ProcPtr, hWnd, message, wParam, lParam));
\r
752 case WM_DROPFILES :
\r
753 //
\83h
\83\89\83b
\83O
\92\86\82Í
\8f\88\97\9d\82µ
\82È
\82¢
\81B
\83h
\83\89\83b
\83O
\8cã
\82ÉWM_LBUTTONDOWN
\82ª
\94ò
\82ñ
\82Å
\82
\82é
\82½
\82ß
\81A
\82»
\82±
\82Å
\8f\88\97\9d\82·
\82é
\81B
\r
754 if (Dragging == YES)
\r
757 if(hWnd == hWndListRemote)
\r
759 if(AskConnecting() == YES)
\r
760 UpLoadDragProc(wParam);
\r
762 else if(hWnd == hWndListLocal)
\r
764 ChangeDirDropFileProc(wParam);
\r
768 case WM_LBUTTONDOWN :
\r
769 EraseListViewTips();
\r
771 DragPoint.x = LOWORD(lParam);
\r
772 DragPoint.y = HIWORD(lParam);
\r
773 hWndDragStart = hWnd;
\r
774 return(CallWindowProc(ProcPtr, hWnd, message, wParam, lParam));
\r
777 case WM_LBUTTONUP :
\r
778 if(Dragging == YES)
\r
782 hCsrDrg = LoadCursor(NULL, IDC_ARROW);
\r
783 SetCursor(hCsrDrg);
\r
785 Point.x = (long)(short)LOWORD(lParam);
\r
786 Point.y = (long)(short)HIWORD(lParam);
\r
787 ClientToScreen(hWnd, &Point);
\r
788 hWndPnt = WindowFromPoint(Point);
\r
789 if(hWndPnt == hWndDst) // local <-> remote
\r
791 if(hWndPnt == hWndListRemote) {
\r
792 PostMessage(GetMainHwnd(), WM_COMMAND, MAKEWPARAM(MENU_UPLOAD, 0), 0);
\r
793 } else if(hWndPnt == hWndListLocal) {
\r
794 PostMessage(GetMainHwnd(), WM_COMMAND, MAKEWPARAM(MENU_DOWNLOAD, 0), 0);
\r
796 } else { //
\93¯
\88ê
\83E
\83B
\83\93\83h
\83E
\93à
\82Ì
\8fê
\8d\87 (yutaka)
\r
797 if (hWndDragStart == hWndListRemote && hWndPnt == hWndListRemote) {
\r
798 // remote <-> remote
\82Ì
\8fê
\8d\87\82Í
\81A
\83T
\81[
\83o
\82Å
\82Ì
\83t
\83@
\83C
\83\8b\82Ì
\88Ú
\93®
\82ð
\8ds
\82¤
\81B(2007.9.5 yutaka)
\r
799 if (RemoteDropFileIndex != -1) {
\r
800 ListView_SetItemState(hWnd, RemoteDropFileIndex, 0, LVIS_DROPHILITED);
\r
801 MoveRemoteFileProc(RemoteDropFileIndex);
\r
808 return(CallWindowProc(ProcPtr, hWnd, message, wParam, lParam));
\r
811 // OLE D&D
\82ð
\8aJ
\8en
\82·
\82é (yutaka)
\r
812 doDragDrop(hWnd, message, wParam, lParam);
\r
816 case WM_GETDATA: //
\83t
\83@
\83C
\83\8b\82Ì
\83p
\83X
\82ðD&D
\90æ
\82Ì
\83A
\83v
\83\8a\82Ö
\95Ô
\82· (yutaka)
\r
819 case CF_HDROP: /*
\83t
\83@
\83C
\83\8b */
\r
821 OSVERSIONINFO os_info;
\r
822 BOOL NTFlag = FALSE;
\r
823 char **FileNameList;
\r
825 int i, j, filenum = 0;
\r
827 FILELIST *FileListBase, *FileListBaseNoExpand, *pf;
\r
828 int CancelFlg = NO;
\r
829 char LocDir[FMAX_PATH+1];
\r
832 //
\83\8d\81[
\83J
\83\8b\91¤
\82Å
\91I
\82Î
\82ê
\82Ä
\82¢
\82é
\83t
\83@
\83C
\83\8b\82ðFileListBase
\82É
\93o
\98^
\r
833 if (hWndDragStart == hWndListLocal) {
\r
834 AskLocalCurDir(LocDir, FMAX_PATH);
\r
837 FileListBase = NULL;
\r
838 MakeSelectedFileList(WIN_LOCAL, YES, NO, &FileListBase, &CancelFlg);
\r
840 } else if (hWndDragStart == hWndListRemote) {
\r
841 GetCursorPos(&Point);
\r
842 hWndPnt = WindowFromPoint(Point);
\r
843 hWndParent = GetParent(hWndPnt);
\r
844 if (hWndPnt == hWndListRemote || hWndPnt == hWndListLocal ||
\r
845 hWndParent == hWndListRemote || hWndParent == hWndListLocal) {
\r
846 FileListBase = NULL;
\r
849 //
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83\8a\83\82\81[
\83g
\83t
\83@
\83C
\83\8b\82Ì
\83\8a\83X
\83g
\83A
\83b
\83v
\r
850 //
\82±
\82Ì
\83^
\83C
\83~
\83\93\83O
\82Å
\83\8a\83\82\81[
\83g
\82©
\82ç
\83\8d\81[
\83J
\83\8b\82Ì
\88ê
\8e\9e\83t
\83H
\83\8b\83_
\82Ö
\83_
\83E
\83\93\83\8d\81[
\83h
\82·
\82é
\r
851 // (2007.8.31 yutaka)
\r
852 doTransferRemoteFile();
\r
853 PathDir = remoteFileDir;
\r
854 FileListBase = remoteFileListBase;
\r
855 FileListBaseNoExpand = remoteFileListBaseNoExpand;
\r
860 pf = FileListBaseNoExpand;
\r
861 for (filenum = 0; pf ; filenum++) {
\r
864 //
\83t
\83@
\83C
\83\8b\82ª
\96¢
\91I
\91ð
\82Ì
\8fê
\8d\87\82Í
\89½
\82à
\82µ
\82È
\82¢
\81B(yutaka)
\r
865 if (filenum <= 0) {
\r
866 *((HANDLE *)lParam) = NULL;
\r
870 /*
\83t
\83@
\83C
\83\8b\96¼
\82Ì
\94z
\97ñ
\82ð
\8dì
\90¬
\82·
\82é */
\r
871 FileNameList = (char **)GlobalAlloc(GPTR,sizeof(char *) * filenum);
\r
872 if(FileNameList == NULL){
\r
875 pf = FileListBaseNoExpand;
\r
876 for (j = 0; pf ; j++) {
\r
877 filelen = strlen(PathDir) + 1 + strlen(pf->File) + 1;
\r
878 FileNameList[j] = (char *)GlobalAlloc(GPTR, filelen);
\r
879 strncpy_s(FileNameList[j], filelen, PathDir, _TRUNCATE);
\r
880 strncat_s(FileNameList[j], filelen, "\\", _TRUNCATE);
\r
881 strncat_s(FileNameList[j], filelen, pf->File, _TRUNCATE);
\r
884 if (FileListBase->Node == NODE_DIR) {
\r
885 //
\83t
\83H
\83\8b\83_
\82ð
\92Í
\82ñ
\82¾
\8fê
\8d\87\82Í
\82»
\82ê
\88È
\8d~
\93W
\8aJ
\82µ
\82È
\82¢
\r
892 os_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
\r
893 GetVersionEx(&os_info);
\r
894 if(os_info.dwPlatformId == VER_PLATFORM_WIN32_NT){
\r
898 /*
\83h
\83\8d\83b
\83v
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\8dì
\90¬ */
\r
899 /* NT
\82Ì
\8fê
\8d\87\82ÍUNICODE
\82É
\82È
\82é
\82æ
\82¤
\82É
\82·
\82é */
\r
900 *((HANDLE *)lParam) = CreateDropFileMem(FileNameList, filenum, NTFlag);
\r
902 /*
\83t
\83@
\83C
\83\8b\96¼
\82Ì
\94z
\97ñ
\82ð
\89ð
\95ú
\82·
\82é */
\r
903 for (i = 0; i < filenum ; i++) {
\r
904 GlobalFree(FileNameList[i]);
\r
906 GlobalFree(FileNameList);
\r
908 if (hWndDragStart == hWndListLocal) {
\r
909 DeleteFileList(&FileListBase);
\r
911 //
\82 \82Æ
\82Å
\83t
\83@
\83C
\83\8b\8dí
\8f\9c\82µ
\82Ä
\83t
\83\8a\81[
\82·
\82é
\r
919 *((HANDLE *)lParam) = NULL;
\r
929 static int prev_index = -1;
\r
931 //
\93¯
\88ê
\83E
\83B
\83\93\83h
\83E
\93à
\82Å
\82ÌD&D
\82Í
\83\8a\83\82\81[
\83g
\91¤
\82Ì
\82Ý
\r
932 if (Win != WIN_REMOTE)
\r
935 if(MoveMode == MOVE_DISABLE)
\r
938 memset(&hi, 0, sizeof(hi));
\r
940 GetCursorPos(&Point);
\r
941 hWndPnt = WindowFromPoint(Point);
\r
942 ScreenToClient(hWnd, &Point);
\r
946 //
\88È
\91O
\82Ì
\91I
\91ð
\82ð
\8fÁ
\82·
\r
947 ListView_SetItemState(hWnd, prev_index, 0, LVIS_DROPHILITED);
\r
948 RemoteDropFileIndex = -1;
\r
950 if ((hWndPnt == hWndListRemote) && (ListView_HitTest(hWnd, &hi) != -1)) {
\r
951 if (hi.flags == LVHT_ONITEMLABEL) { // The position is over a list-view item's text.
\r
954 prev_index = index;
\r
955 Node = GetNodeType(Win, index);
\r
956 if (Node == NODE_DIR) {
\r
957 ListView_SetItemState(hWnd, index, LVIS_DROPHILITED, LVIS_DROPHILITED);
\r
958 RemoteDropFileIndex = index;
\r
966 case WM_RBUTTONDOWN :
\r
967 /*
\82±
\82±
\82Å
\83t
\83@
\83C
\83\8b\82ð
\91I
\82Ô */
\r
968 CallWindowProc(ProcPtr, hWnd, message, wParam, lParam);
\r
970 EraseListViewTips();
\r
972 if(hWnd == hWndListRemote)
\r
973 RemoteRbuttonMenu(0);
\r
974 else if(hWnd == hWndListLocal)
\r
975 LocalRbuttonMenu(0);
\r
978 case WM_LBUTTONDBLCLK :
\r
979 DoubleClickProc(Win, NO, -1);
\r
982 case WM_MOUSEMOVE :
\r
983 if(wParam == MK_LBUTTON)
\r
985 if((Dragging == NO) &&
\r
986 (hWnd == hWndDragStart) &&
\r
987 (AskConnecting() == YES) &&
\r
988 (SendMessage(hWnd, LVM_GETSELECTEDCOUNT, 0, 0) > 0) &&
\r
989 ((abs((short)LOWORD(lParam) - DragPoint.x) > 5) ||
\r
990 (abs((short)HIWORD(lParam) - DragPoint.y) > 5)))
\r
994 hCsrDrg = LoadCursor(GetFtpInst(), MAKEINTRESOURCE(drag_csr));
\r
995 hCsrNoDrg = LoadCursor(GetFtpInst(), MAKEINTRESOURCE(nodrop_csr));
\r
996 SetCursor(hCsrDrg);
\r
998 else if(Dragging == YES)
\r
1000 Point.x = (long)(short)LOWORD(lParam);
\r
1001 Point.y = (long)(short)HIWORD(lParam);
\r
1002 ClientToScreen(hWnd, &Point);
\r
1003 hWndPnt = WindowFromPoint(Point);
\r
1004 if((hWndPnt == hWndListRemote) || (hWndPnt == hWndListLocal))
\r
1005 SetCursor(hCsrDrg);
\r
1007 //
\83}
\83E
\83X
\83|
\83C
\83\93\83^
\82Ì
\81~
\95\
\8e¦
\82ð
\82â
\82ß
\82é (yutaka)
\r
1009 SetCursor(hCsrNoDrg);
\r
1013 // OLE D&D
\82Ì
\8aJ
\8en
\82ð
\8ew
\8e¦
\82·
\82é
\r
1014 PostMessage(hWnd, WM_DRAGDROP, MAKEWPARAM(wParam, lParam), 0);
\r
1018 return(CallWindowProc(ProcPtr, hWnd, message, wParam, lParam));
\r
1022 CheckTipsDisplay(hWnd, lParam);
\r
1023 return(CallWindowProc(ProcPtr, hWnd, message, wParam, lParam));
\r
1027 case WM_MOUSEWHEEL :
\r
1028 if(Dragging == NO)
\r
1030 short zDelta = (short)HIWORD(wParam);
\r
1032 EraseListViewTips();
\r
1033 Point.x = (short)LOWORD(lParam);
\r
1034 Point.y = (short)HIWORD(lParam);
\r
1035 hWndPnt = WindowFromPoint(Point);
\r
1037 if((wParam & MAKEWPARAM(MK_SHIFT, 0)) &&
\r
1038 ((hWndPnt == hWndListRemote) ||
\r
1039 (hWndPnt == hWndListLocal) ||
\r
1040 (hWndPnt == GetTaskWnd())))
\r
1042 PostMessage(hWndPnt, WM_VSCROLL, zDelta > 0 ? MAKEWPARAM(SB_PAGEUP, 0) : MAKEWPARAM(SB_PAGEDOWN, 0), 0);
\r
1043 // PostMessage(hWndPnt, WM_VSCROLL, MAKEWPARAM(SB_ENDSCROLL, 0), 0);
\r
1045 else if(hWndPnt == hWnd)
\r
1046 return(CallWindowProc(ProcPtr, hWnd, message, wParam, lParam));
\r
1047 else if((hWndPnt == hWndDst) || (hWndPnt == GetTaskWnd()))
\r
1048 PostMessage(hWndPnt, message, wParam, lParam);
\r
1053 return(CallWindowProc(ProcPtr, hWnd, message, wParam, lParam));
\r
1059 /*-----
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\83^
\83u
\95\9d\82ð
\8eæ
\93¾
\82·
\82é --------------------------------------
\r
1066 *----------------------------------------------------------------------------*/
\r
1068 void GetListTabWidth(void)
\r
1073 for(i = 0; i <= 3; i++)
\r
1075 LvCol.mask = LVCF_WIDTH;
\r
1076 if(SendMessage(hWndListLocal, LVM_GETCOLUMN, i, (LPARAM)&LvCol) == TRUE)
\r
1077 LocalTabWidth[i] = LvCol.cx;
\r
1080 for(i = 0; i <= 5; i++)
\r
1082 LvCol.mask = LVCF_WIDTH;
\r
1083 if(SendMessage(hWndListRemote, LVM_GETCOLUMN, i, (LPARAM)&LvCol) == TRUE)
\r
1084 RemoteTabWidth[i] = LvCol.cx;
\r
1090 /*-----
\83t
\83@
\83C
\83\8b\88ê
\97\97\95û
\96@
\82É
\82µ
\82½
\82ª
\82Á
\82Ä
\83\8a\83X
\83g
\83r
\83\85\81[
\82ð
\90Ý
\92è
\82·
\82é --------------------
\r
1097 *----------------------------------------------------------------------------*/
\r
1099 void SetListViewType(void)
\r
1106 lStyle = GetWindowLong(GetLocalHwnd(), GWL_STYLE);
\r
1107 lStyle &= ~(LVS_REPORT | LVS_LIST);
\r
1108 lStyle |= LVS_LIST;
\r
1109 SetWindowLong(GetLocalHwnd(), GWL_STYLE, lStyle);
\r
1111 lStyle = GetWindowLong(GetRemoteHwnd(), GWL_STYLE);
\r
1112 lStyle &= ~(LVS_REPORT | LVS_LIST);
\r
1113 lStyle |= LVS_LIST;
\r
1114 SetWindowLong(GetRemoteHwnd(), GWL_STYLE, lStyle);
\r
1118 lStyle = GetWindowLong(GetLocalHwnd(), GWL_STYLE);
\r
1119 lStyle &= ~(LVS_REPORT | LVS_LIST);
\r
1120 lStyle |= LVS_REPORT;
\r
1121 SetWindowLong(GetLocalHwnd(), GWL_STYLE, lStyle);
\r
1123 lStyle = GetWindowLong(GetRemoteHwnd(), GWL_STYLE);
\r
1124 lStyle &= ~(LVS_REPORT | LVS_LIST);
\r
1125 lStyle |= LVS_REPORT;
\r
1126 SetWindowLong(GetRemoteHwnd(), GWL_STYLE, lStyle);
\r
1133 /*-----
\83z
\83X
\83g
\91¤
\82Ì
\83t
\83@
\83C
\83\8b\88ê
\97\97\83E
\83C
\83\93\83h
\83E
\82É
\83t
\83@
\83C
\83\8b\96¼
\82ð
\83Z
\83b
\83g ------------------
\r
1136 * int Mode :
\83L
\83\83\83b
\83V
\83\85\83\82\81[
\83h (CACHE_xxx)
\r
1140 *----------------------------------------------------------------------------*/
\r
1142 void GetRemoteDirForWnd(int Mode, int *CancelCheckWork)
\r
1146 char Str[FMAX_PATH+1];
\r
1147 char Buf[FMAX_PATH+1];
\r
1153 FLISTANCHOR Anchor;
\r
1154 char Owner[OWNER_NAME_LEN+1];
\r
1159 //DoPrintf("===== GetRemoteDirForWnd");
\r
1161 Anchor.Top = NULL;
\r
1164 if(AskConnecting() == YES)
\r
1166 // SetCursor(LoadCursor(NULL, IDC_WAIT));
\r
1169 AskRemoteCurDir(Buf, FMAX_PATH);
\r
1170 SetRemoteDirHist(Buf);
\r
1172 Type = FTP_COMPLETE;
\r
1173 if(Mode != CACHE_LASTREAD)
\r
1176 if((Num = AskCached(Buf)) == -1)
\r
1178 Num = AskFreeCache();
\r
1179 Mode = CACHE_REFRESH;
\r
1182 if(Mode == CACHE_REFRESH)
\r
1184 if((Type = DoDirListCmdSkt("", "", Num, CancelCheckWork)) == FTP_COMPLETE)
\r
1185 SetCache(Num, Buf);
\r
1191 Num = AskCurrentFileListNum();
\r
1193 if(Type == FTP_COMPLETE)
\r
1195 SetCurrentFileListNum(Num);
\r
1196 MakeCacheFileName(Num, Buf);
\r
1197 if((fd = fopen(Buf, "rb"))!=NULL)
\r
1199 ListType = LIST_UNKNOWN;
\r
1201 while(GetListOneLine(Str, FMAX_PATH, fd) == SUCCESS)
\r
1203 if((ListType = AnalizeFileInfo(Str)) != LIST_UNKNOWN)
\r
1205 if((Type = ResolvFileInfo(Str, ListType, Buf, &Size, &Time, &Attr, Owner, &Link, &InfoExist)) != NODE_NONE)
\r
1207 if(AskFilterStr(Buf, Type) == YES)
\r
1209 if((DotFile == YES) || (Buf[0] != '.'))
\r
1211 AddDispFileList(&Anchor, Buf, &Time, Size, Attr, Type, Link, Owner, InfoExist, WIN_REMOTE);
\r
1219 DispFileList2View(GetRemoteHwnd(), &Anchor);
\r
1220 EraseDispFileList(&Anchor);
\r
1222 //
\90æ
\93ª
\82Ì
\83A
\83C
\83e
\83\80\82ð
\91I
\91ð
\r
1223 ListView_SetItemState(GetRemoteHwnd(), 0, LVIS_FOCUSED, LVIS_FOCUSED);
\r
1227 SetTaskMsg(MSGJPN048);
\r
1228 SendMessage(GetRemoteHwnd(), LVM_DELETEALLITEMS, 0, 0);
\r
1233 #if defined(HAVE_OPENVMS)
\r
1234 /* OpenVMS
\82Ì
\8fê
\8d\87\8bó
\83f
\83B
\83\8c\83N
\83g
\83\8a\88Ú
\93®
\82Ì
\8e\9e\82É
\8fo
\82é
\82Ì
\82Å
\81A
\83\81\83b
\83Z
\81[
\83W
\82¾
\82¯
\8fo
\82³
\82È
\82¢
\r
1235 *
\82æ
\82¤
\82É
\82·
\82é(VIEW
\82Í
\83N
\83\8a\83A
\82µ
\82Ä
\97Ç
\82¢) */
\r
1236 if (AskHostType() != HTYPE_VMS)
\r
1238 SetTaskMsg(MSGJPN049);
\r
1239 SendMessage(GetRemoteHwnd(), LVM_DELETEALLITEMS, 0, 0);
\r
1242 // SetCursor(LoadCursor(NULL, IDC_ARROW));
\r
1248 //DoPrintf("===== GetRemoteDirForWnd Done");
\r
1254 /*-----
\83\8d\81[
\83J
\83\8b\91¤
\82Ì
\83t
\83@
\83C
\83\8b\88ê
\97\97\83E
\83C
\83\93\83h
\83E
\82É
\83t
\83@
\83C
\83\8b\96¼
\82ð
\83Z
\83b
\83g ----------------
\r
1261 *----------------------------------------------------------------------------*/
\r
1263 void GetLocalDirForWnd(void)
\r
1266 WIN32_FIND_DATA Find;
\r
1267 char Scan[FMAX_PATH+1];
\r
1271 FLISTANCHOR Anchor;
\r
1275 Anchor.Top = NULL;
\r
1279 SetLocalDirHist(Scan);
\r
1280 DispLocalFreeSpace(Scan);
\r
1282 /*
\83f
\83B
\83\8c\83N
\83g
\83\8a\81^
\83t
\83@
\83C
\83\8b */
\r
1285 strcat(Scan, "*");
\r
1286 if((fHnd = FindFirstFileAttr(Scan, &Find, DispIgnoreHide)) != INVALID_HANDLE_VALUE)
\r
1290 if((strcmp(Find.cFileName, ".") != 0) &&
\r
1291 (strcmp(Find.cFileName, "..") != 0))
\r
1293 if((DotFile == YES) || (Find.cFileName[0] != '.'))
\r
1295 if(Find.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
\r
1296 AddDispFileList(&Anchor, Find.cFileName, &Find.ftLastWriteTime, MakeLongLong(Find.nFileSizeHigh, Find.nFileSizeLow), 0, NODE_DIR, NO, "", FINFO_ALL, WIN_LOCAL);
\r
1299 if(AskFilterStr(Find.cFileName, NODE_FILE) == YES)
\r
1301 AddDispFileList(&Anchor, Find.cFileName, &Find.ftLastWriteTime, MakeLongLong(Find.nFileSizeHigh, Find.nFileSizeLow), 0, NODE_FILE, NO, "", FINFO_ALL, WIN_LOCAL);
\r
1307 while(FindNextFileAttr(fHnd, &Find, DispIgnoreHide) == TRUE);
\r
1311 /*
\83h
\83\89\83C
\83u */
\r
1314 GetLogicalDriveStrings(FMAX_PATH, Scan);
\r
1315 NoDrives = LoadHideDriveListRegistory();
\r
1318 while(*Pos != NUL)
\r
1320 Tmp = toupper(*Pos) - 'A';
\r
1321 if((NoDrives & (0x00000001 << Tmp)) == 0)
\r
1323 sprintf(Buf, "%s", Pos);
\r
1324 memset(&Time, 0, sizeof(FILETIME));
\r
1325 AddDispFileList(&Anchor, Buf, &Time, 0, 0, NODE_DRIVE, NO, "", FINFO_ALL, WIN_LOCAL);
\r
1327 Pos = strchr(Pos, NUL) + 1;
\r
1331 DispFileList2View(GetLocalHwnd(), &Anchor);
\r
1332 EraseDispFileList(&Anchor);
\r
1334 //
\90æ
\93ª
\82Ì
\83A
\83C
\83e
\83\80\82ð
\91I
\91ð
\r
1335 ListView_SetItemState(GetLocalHwnd(), 0, LVIS_FOCUSED, LVIS_FOCUSED);
\r
1341 /*-----
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\82ð
\83t
\83@
\83C
\83\8b\88ê
\97\97\97p
\83\8a\83X
\83g
\82É
\93o
\98^
\82·
\82é --------------------------
\r
1344 * FLISTANCHOR *Anchor :
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
1345 * char *Name :
\83t
\83@
\83C
\83\8b\96¼
\r
1346 * FILETIME *Time :
\93ú
\95t
\r
1347 * LONGLONG Size :
\83T
\83C
\83Y
\r
1348 * int Attr :
\91®
\90«
\r
1349 * int Type :
\83^
\83C
\83v (NODE_xxxx)
\r
1350 * int Link :
\83\8a\83\93\83N
\82©
\82Ç
\82¤
\82© (YES/NO)
\r
1351 * char *Owner :
\83I
\81[
\83i
\96¼
\r
1352 * int InfoExist :
\8fî
\95ñ
\82ª
\82 \82é
\82©
\82Ç
\82¤
\82© (FINFO_xxx)
\r
1353 * int Win :
\83E
\83B
\83\93\83h
\83E
\94Ô
\8d\86 (WIN_xxxx)
\r
1357 *----------------------------------------------------------------------------*/
\r
1359 static void AddDispFileList(FLISTANCHOR *Anchor, char *Name, FILETIME *Time, LONGLONG Size, int Attr, int Type, int Link, char *Owner, int InfoExist, int Win)
\r
1370 FileSort = AskSortType(ITEM_LFILE);
\r
1371 DirSort = AskSortType(ITEM_LDIR);
\r
1372 if(Win == WIN_REMOTE)
\r
1374 FileSort = AskSortType(ITEM_RFILE);
\r
1375 DirSort = AskSortType(ITEM_RDIR);
\r
1378 Pos = Anchor->Top;
\r
1379 for(i = 0; i < Anchor->Files; i++)
\r
1381 if((Type == NODE_DIR) && (Pos->Node == NODE_FILE))
\r
1383 if((Type == NODE_FILE) && (Pos->Node == NODE_DRIVE))
\r
1386 if(Type == Pos->Node)
\r
1388 if(Type == NODE_DIR)
\r
1393 if((Sort & SORT_GET_ORD) == SORT_ASCENT)
\r
1395 if((((Sort & SORT_MASK_ORD) == SORT_EXT) &&
\r
1396 ((Cmp = _mbsicmp(GetFileExt(Name), GetFileExt(Pos->File))) < 0)) ||
\r
1397 (((Sort & SORT_MASK_ORD) == SORT_SIZE) &&
\r
1398 ((Cmp = Size - Pos->Size) < 0)) ||
\r
1399 (((Sort & SORT_MASK_ORD) == SORT_DATE) &&
\r
1400 ((Cmp = CompareFileTime(Time, &Pos->Time)) < 0)))
\r
1405 if(((Sort & SORT_MASK_ORD) == SORT_NAME) || (Cmp == 0))
\r
1407 if(_mbsicmp(Name, Pos->File) < 0)
\r
1413 if((((Sort & SORT_MASK_ORD) == SORT_EXT) &&
\r
1414 ((Cmp = _mbsicmp(GetFileExt(Name), GetFileExt(Pos->File))) > 0)) ||
\r
1415 (((Sort & SORT_MASK_ORD) == SORT_SIZE) &&
\r
1416 ((Cmp = Size - Pos->Size) > 0)) ||
\r
1417 (((Sort & SORT_MASK_ORD) == SORT_DATE) &&
\r
1418 ((Cmp = CompareFileTime(Time, &Pos->Time)) > 0)))
\r
1423 if(((Sort & SORT_MASK_ORD) == SORT_NAME) || (Cmp == 0))
\r
1425 if(_mbsicmp(Name, Pos->File) > 0)
\r
1434 if((New = malloc(sizeof(FILELIST))) != NULL)
\r
1436 strcpy(New->File, Name);
\r
1441 New->Time = *Time;
\r
1442 strcpy(New->Owner, Owner);
\r
1443 New->InfoExist = InfoExist;
\r
1445 if(Pos == Anchor->Top)
\r
1447 New->Next = Anchor->Top;
\r
1448 Anchor->Top = New;
\r
1452 New->Next = Prev->Next;
\r
1455 Anchor->Files += 1;
\r
1461 /*-----
\83t
\83@
\83C
\83\8b\88ê
\97\97\97p
\83\8a\83X
\83g
\82ð
\83N
\83\8a\83A
\82·
\82é --------------------------------------
\r
1464 * FLISTANCHOR *Anchor :
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
1468 *----------------------------------------------------------------------------*/
\r
1470 static void EraseDispFileList(FLISTANCHOR *Anchor)
\r
1476 Pos = Anchor->Top;
\r
1477 for(i = 0; i < Anchor->Files; i++)
\r
1483 Anchor->Files = 0;
\r
1484 Anchor->Top = NULL;
\r
1489 /*-----
\83t
\83@
\83C
\83\8b\88ê
\97\97\97p
\83\8a\83X
\83g
\82Ì
\93à
\97e
\82ð
\83t
\83@
\83C
\83\8b\88ê
\97\97\83E
\83C
\83\93\83h
\83E
\82É
\83Z
\83b
\83g ------------
\r
1492 * HWND hWnd :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
1493 * FLISTANCHOR *Anchor :
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
1497 *----------------------------------------------------------------------------*/
\r
1499 static void DispFileList2View(HWND hWnd, FLISTANCHOR *Anchor)
\r
1504 SendMessage(hWnd, WM_SETREDRAW, (WPARAM)FALSE, 0);
\r
1505 SendMessage(hWnd, LVM_DELETEALLITEMS, 0, 0);
\r
1507 Pos = Anchor->Top;
\r
1508 for(i = 0; i < Anchor->Files; i++)
\r
1510 AddListView(hWnd, -1, Pos->File, Pos->Node, Pos->Size, &Pos->Time, Pos->Attr, Pos->Owner, Pos->Link, Pos->InfoExist);
\r
1514 SendMessage(hWnd, WM_SETREDRAW, (WPARAM)TRUE, 0);
\r
1515 UpdateWindow(hWnd);
\r
1517 DispSelectedSpace();
\r
1522 /*-----
\83t
\83@
\83C
\83\8b\88ê
\97\97\83E
\83C
\83\93\83h
\83E
\81i
\83\8a\83X
\83g
\83r
\83\85\81[
\81j
\82É
\92Ç
\89Á --------------------------
\r
1525 * HWND hWnd :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
1526 * int Pos :
\91}
\93ü
\88Ê
\92u
\r
1527 * char *Name :
\96¼
\91O
\r
1528 * int Type :
\83^
\83C
\83v (NIDE_xxxx)
\r
1529 * LONGLONG Size :
\83T
\83C
\83Y
\r
1530 * FILETIME *Time :
\93ú
\95t
\r
1531 * int Attr :
\91®
\90«
\r
1532 * char Owner :
\83I
\81[
\83i
\96¼
\r
1533 * int Link :
\83\8a\83\93\83N
\82©
\82Ç
\82¤
\82©
\r
1534 * int InfoExist :
\8fî
\95ñ
\82ª
\82 \82é
\82©
\82Ç
\82¤
\82© (FINFO_xxx)
\r
1538 *----------------------------------------------------------------------------*/
\r
1540 static void AddListView(HWND hWnd, int Pos, char *Name, int Type, LONGLONG Size, FILETIME *Time, int Attr, char *Owner, int Link, int InfoExist)
\r
1546 Pos = SendMessage(hWnd, LVM_GETITEMCOUNT, 0, 0);
\r
1548 /*
\83A
\83C
\83R
\83\93/
\83t
\83@
\83C
\83\8b\96¼ */
\r
1549 LvItem.mask = LVIF_TEXT | LVIF_IMAGE;
\r
1550 LvItem.iItem = Pos;
\r
1551 LvItem.iSubItem = 0;
\r
1552 LvItem.pszText = Name;
\r
1553 if((Type == NODE_FILE) && (AskTransferTypeAssoc(Name, TYPE_X) == TYPE_I))
\r
1556 LvItem.iImage = Type;
\r
1558 LvItem.iImage = 4;
\r
1559 LvItem.iItem = SendMessage(hWnd, LVM_INSERTITEM, 0, (LPARAM)&LvItem);
\r
1561 /*
\93ú
\95t/
\8e\9e\8d\8f */
\r
1562 FileTime2TimeString(Time, Tmp, DISPFORM_LEGACY, InfoExist);
\r
1563 LvItem.mask = LVIF_TEXT;
\r
1564 LvItem.iItem = Pos;
\r
1565 LvItem.iSubItem = 1;
\r
1566 LvItem.pszText = Tmp;
\r
1567 LvItem.iItem = SendMessage(hWnd, LVM_SETITEM, 0, (LPARAM)&LvItem);
\r
1569 /*
\83T
\83C
\83Y */
\r
1570 if(Type == NODE_DIR)
\r
1571 strcpy(Tmp, "<DIR>");
\r
1572 else if(Type == NODE_DRIVE)
\r
1573 strcpy(Tmp, "<DRIVE>");
\r
1574 else if(Size >= 0)
\r
1575 MakeNumString(Size, Tmp, TRUE);
\r
1578 LvItem.mask = LVIF_TEXT;
\r
1579 LvItem.iItem = Pos;
\r
1580 LvItem.iSubItem = 2;
\r
1581 LvItem.pszText = Tmp;
\r
1582 LvItem.iItem = SendMessage(hWnd, LVM_SETITEM, 0, (LPARAM)&LvItem);
\r
1584 /*
\8ag
\92£
\8eq */
\r
1585 LvItem.mask = LVIF_TEXT;
\r
1586 LvItem.iItem = Pos;
\r
1587 LvItem.iSubItem = 3;
\r
1588 LvItem.pszText = GetFileExt(Name);
\r
1589 LvItem.iItem = SendMessage(hWnd, LVM_SETITEM, 0, (LPARAM)&LvItem);
\r
1591 if(hWnd == GetRemoteHwnd())
\r
1595 if(InfoExist & FINFO_ATTR)
\r
1596 AttrValue2String(Attr, Tmp);
\r
1597 LvItem.mask = LVIF_TEXT;
\r
1598 LvItem.iItem = Pos;
\r
1599 LvItem.iSubItem = 4;
\r
1600 LvItem.pszText = Tmp;
\r
1601 LvItem.iItem = SendMessage(hWnd, LVM_SETITEM, 0, (LPARAM)&LvItem);
\r
1603 /*
\83I
\81[
\83i
\96¼ */
\r
1604 LvItem.mask = LVIF_TEXT;
\r
1605 LvItem.iItem = Pos;
\r
1606 LvItem.iSubItem = 5;
\r
1607 LvItem.pszText = Owner;
\r
1608 LvItem.iItem = SendMessage(hWnd, LVM_SETITEM, 0, (LPARAM)&LvItem);
\r
1614 /*-----
\83t
\83@
\83C
\83\8b\96¼
\88ê
\97\97\83E
\83C
\83\93\83h
\83E
\82ð
\83\
\81[
\83g
\82µ
\92¼
\82· --------------------------------
\r
1617 * int Win :
\83E
\83B
\83\93\83h
\83E
\94Ô
\8d\86 (WIN_xxxx)
\r
1621 *----------------------------------------------------------------------------*/
\r
1623 void ReSortDispList(int Win, int *CancelCheckWork)
\r
1625 if(Win == WIN_REMOTE)
\r
1626 GetRemoteDirForWnd(CACHE_LASTREAD, CancelCheckWork);
\r
1628 GetLocalDirForWnd();
\r
1633 /*-----
\83t
\83@
\83C
\83\8b\88ê
\97\97\83E
\83C
\83\93\83h
\83E
\82Ì
\83t
\83@
\83C
\83\8b\82ð
\91I
\91ð
\82·
\82é ----------------------------
\r
1636 * HWND hWnd :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
1637 * int Type :
\91I
\91ð
\95û
\96@ (SELECT_xxx)
\r
1641 *----------------------------------------------------------------------------*/
\r
1643 void SelectFileInList(HWND hWnd, int Type)
\r
1649 char RegExp[FMAX_PATH+1];
\r
1650 char Name[FMAX_PATH+1];
\r
1658 WinDst = WIN_REMOTE;
\r
1659 if(hWnd == GetRemoteHwnd())
\r
1662 WinDst = WIN_LOCAL;
\r
1665 Num = GetItemCount(Win);
\r
1670 if(GetSelectedCount(Win) <= 1)
\r
1671 LvItem.state = LVIS_SELECTED;
\r
1672 for(i = 0; i < Num; i++)
\r
1674 if(GetNodeType(Win, i) != NODE_DRIVE)
\r
1676 LvItem.mask = LVIF_STATE;
\r
1678 LvItem.stateMask = LVIS_SELECTED;
\r
1679 LvItem.iSubItem = 0;
\r
1680 SendMessage(hWnd, LVM_SETITEMSTATE, i, (LPARAM)&LvItem);
\r
1685 case SELECT_REGEXP :
\r
1686 if(((Win == WIN_LOCAL) &&
\r
1687 (DialogBox(GetFtpInst(), MAKEINTRESOURCE(sel_local_dlg), hWnd, SelectDialogCallBack) == YES)) ||
\r
1688 ((Win == WIN_REMOTE) &&
\r
1689 (DialogBox(GetFtpInst(), MAKEINTRESOURCE(sel_remote_dlg), hWnd, SelectDialogCallBack) == YES)))
\r
1691 strcpy(RegExp, FindStr);
\r
1692 // if(FindMode == 0)
\r
1693 // WildCard2RegExp(RegExp);
\r
1696 if((FindMode == 0) || (JreCompileStr(RegExp) == TRUE))
\r
1699 for(i = 0; i < Num; i++)
\r
1701 GetNodeName(Win, i, Name, FMAX_PATH);
\r
1702 Find = FindNameNode(WinDst, Name);
\r
1706 if(GetNodeType(Win, i) != NODE_DRIVE)
\r
1708 if(((FindMode == 0) && (CheckFname(Name, RegExp) == SUCCESS)) ||
\r
1709 ((FindMode != 0) && (JreGetStrMatchInfo(Name, 0) != NULL)))
\r
1711 LvItem.state = LVIS_SELECTED;
\r
1715 if(IgnoreExist == YES)
\r
1718 if((LvItem.state != 0) && (IgnoreNew == YES))
\r
1720 GetNodeTime(Win, i, &Time1);
\r
1721 GetNodeTime(WinDst, Find, &Time2);
\r
1722 if(CompareFileTime(&Time1, &Time2) > 0)
\r
1726 if((LvItem.state != 0) && (IgnoreOld == YES))
\r
1728 GetNodeTime(Win, i, &Time1);
\r
1729 GetNodeTime(WinDst, Find, &Time2);
\r
1730 if(CompareFileTime(&Time1, &Time2) < 0)
\r
1737 if((LvItem.state != 0) && (CsrPos == -1))
\r
1740 LvItem.mask = LVIF_STATE;
\r
1742 LvItem.stateMask = LVIS_SELECTED;
\r
1743 LvItem.iSubItem = 0;
\r
1744 SendMessage(hWnd, LVM_SETITEMSTATE, i, (LPARAM)&LvItem);
\r
1748 LvItem.mask = LVIF_STATE;
\r
1749 LvItem.iItem = CsrPos;
\r
1750 LvItem.state = LVIS_FOCUSED;
\r
1751 LvItem.stateMask = LVIS_FOCUSED;
\r
1752 LvItem.iSubItem = 0;
\r
1753 SendMessage(hWnd, LVM_SETITEMSTATE, CsrPos, (LPARAM)&LvItem);
\r
1754 SendMessage(hWnd, LVM_ENSUREVISIBLE, CsrPos, (LPARAM)TRUE);
\r
1764 /*-----
\91I
\91ð
\83_
\83C
\83A
\83\8d\83O
\82Ì
\83R
\81[
\83\8b\83o
\83b
\83N ------------------------------------------
\r
1767 * HWND hDlg :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
1768 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
1769 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
1770 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
1774 *----------------------------------------------------------------------------*/
\r
1776 static BOOL CALLBACK SelectDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
1780 case WM_INITDIALOG :
\r
1781 SendDlgItemMessage(hDlg, SEL_FNAME, EM_LIMITTEXT, 40, 0);
\r
1782 SendDlgItemMessage(hDlg, SEL_FNAME, WM_SETTEXT, 0, (LPARAM)FindStr);
\r
1783 SendDlgItemMessage(hDlg, SEL_REGEXP, BM_SETCHECK, FindMode, 0);
\r
1784 SendDlgItemMessage(hDlg, SEL_NOOLD, BM_SETCHECK, IgnoreOld, 0);
\r
1785 SendDlgItemMessage(hDlg, SEL_NONEW, BM_SETCHECK, IgnoreNew, 0);
\r
1786 SendDlgItemMessage(hDlg, SEL_NOEXIST, BM_SETCHECK, IgnoreExist, 0);
\r
1790 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
1793 SendDlgItemMessage(hDlg, SEL_FNAME, WM_GETTEXT, 40+1, (LPARAM)FindStr);
\r
1794 FindMode = SendDlgItemMessage(hDlg, SEL_REGEXP, BM_GETCHECK, 0, 0);
\r
1795 IgnoreOld = SendDlgItemMessage(hDlg, SEL_NOOLD, BM_GETCHECK, 0, 0);
\r
1796 IgnoreNew = SendDlgItemMessage(hDlg, SEL_NONEW, BM_GETCHECK, 0, 0);
\r
1797 IgnoreExist = SendDlgItemMessage(hDlg, SEL_NOEXIST, BM_GETCHECK, 0, 0);
\r
1798 EndDialog(hDlg, YES);
\r
1802 EndDialog(hDlg, NO);
\r
1806 hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000061);
\r
1815 /*-----
\83t
\83@
\83C
\83\8b\88ê
\97\97\83E
\83C
\83\93\83h
\83E
\82Ì
\83t
\83@
\83C
\83\8b\82ð
\8c\9f\8dõ
\82·
\82é ----------------------------
\r
1818 * HWND hWnd :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
1819 * int Type :
\8c\9f\8dõ
\95û
\96@ (FIND_xxx)
\r
1823 *----------------------------------------------------------------------------*/
\r
1825 void FindFileInList(HWND hWnd, int Type)
\r
1830 static char RegExp[FMAX_PATH+1] = { "" };
\r
1831 char Name[FMAX_PATH+1];
\r
1836 Title = MSGJPN050;
\r
1837 if(hWnd == GetRemoteHwnd())
\r
1840 Title = MSGJPN051;
\r
1843 Num = GetItemCount(Win);
\r
1847 if(InputDialogBox(find_dlg, hWnd, Title, FindStr, 40+1, &FindMode, IDH_HELP_TOPIC_0000001) == YES)
\r
1849 strcpy(RegExp, FindStr);
\r
1850 // if(FindMode == 0)
\r
1851 // WildCard2RegExp(RegExp);
\r
1854 if((FindMode == 0) || (JreCompileStr(RegExp) == TRUE))
\r
1856 for(i = GetCurrentItem(Win)+1; i < Num; i++)
\r
1858 GetNodeName(Win, i, Name, FMAX_PATH);
\r
1862 if(((FindMode == 0) && (CheckFname(Name, RegExp) == SUCCESS)) ||
\r
1863 ((FindMode != 0) && (JreGetStrMatchInfo(Name, 0) != NULL)))
\r
1865 LvItem.mask = LVIF_STATE;
\r
1867 LvItem.state = LVIS_FOCUSED;
\r
1868 LvItem.stateMask = LVIS_FOCUSED;
\r
1869 LvItem.iSubItem = 0;
\r
1870 SendMessage(hWnd, LVM_SETITEMSTATE, i, (LPARAM)&LvItem);
\r
1871 SendMessage(hWnd, LVM_ENSUREVISIBLE, i, (LPARAM)TRUE);
\r
1880 for(i = GetCurrentItem(Win)+1; i < Num; i++)
\r
1882 GetNodeName(Win, i, Name, FMAX_PATH);
\r
1886 if(((FindMode == 0) && (CheckFname(Name, RegExp) == SUCCESS)) ||
\r
1887 ((FindMode != 0) && (JreGetStrMatchInfo(Name, 0) != NULL)))
\r
1889 LvItem.mask = LVIF_STATE;
\r
1891 LvItem.state = LVIS_FOCUSED;
\r
1892 LvItem.stateMask = LVIS_FOCUSED;
\r
1893 LvItem.iSubItem = 0;
\r
1894 SendMessage(hWnd, LVM_SETITEMSTATE, i, (LPARAM)&LvItem);
\r
1895 SendMessage(hWnd, LVM_ENSUREVISIBLE, i, (LPARAM)TRUE);
\r
1906 /*-----
\83\8f\83C
\83\8b\83h
\83J
\81[
\83h
\82ð
\90³
\8bK
\95\
\8c»
\82É
\95Ï
\8a·
\82·
\82é ------------------------------------
\r
1909 * char *Str :
\95¶
\8e\9a\97ñ
\r
1913 *----------------------------------------------------------------------------*/
\r
1915 void WildCard2RegExp(char *Str)
\r
1917 char Tmp[FMAX_PATH+1];
\r
1927 while(*Str != NUL)
\r
1929 if(Pos >= Tmp + FMAX_PATH - 3)
\r
1932 Ch = _mbsnextc(Str);
\r
1933 Str = _mbsinc(Str);
\r
1937 if(strchr("[]()^$.+", Ch) != NULL)
\r
1942 else if(Ch == '*')
\r
1947 else if(Ch == '?')
\r
1949 else if(Ch == '|')
\r
1958 _mbsnset(Pos, Ch, 1);
\r
1959 Pos = _mbsinc(Pos);
\r
1972 /*-----
\83J
\81[
\83\
\83\8b\88Ê
\92u
\82Ì
\83A
\83C
\83e
\83\80\94Ô
\8d\86\82ð
\95Ô
\82· --------------------------------------
\r
1975 * int Win :
\83E
\83B
\83\93\83h
\83E
\94Ô
\8d\86 (WIN_xxxx)
\r
1978 * int
\83A
\83C
\83e
\83\80\94Ô
\8d\86\r
1979 *----------------------------------------------------------------------------*/
\r
1981 int GetCurrentItem(int Win)
\r
1986 hWnd = GetLocalHwnd();
\r
1987 if(Win == WIN_REMOTE)
\r
1988 hWnd = GetRemoteHwnd();
\r
1990 if((Ret = SendMessage(hWnd, LVM_GETNEXTITEM, -1, MAKELPARAM(LVNI_ALL | LVNI_FOCUSED, 0))) == -1)
\r
1997 /*-----
\83A
\83C
\83e
\83\80\90\94\82ð
\95Ô
\82· ------------------------------------------------------
\r
2000 * int Win :
\83E
\83B
\83\93\83h
\83E
\94Ô
\8d\86 (WIN_xxxx)
\r
2003 * int
\83A
\83C
\83e
\83\80\90\94\r
2004 *----------------------------------------------------------------------------*/
\r
2006 int GetItemCount(int Win)
\r
2010 hWnd = GetLocalHwnd();
\r
2011 if(Win == WIN_REMOTE)
\r
2012 hWnd = GetRemoteHwnd();
\r
2014 return(SendMessage(hWnd, LVM_GETITEMCOUNT, 0, 0));
\r
2018 /*-----
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\90\94\82ð
\95Ô
\82· ----------------------------------------
\r
2021 * int Win :
\83E
\83B
\83\93\83h
\83E
\94Ô
\8d\86 (WIN_xxxx)
\r
2024 * int
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\90\94\r
2025 *----------------------------------------------------------------------------*/
\r
2027 int GetSelectedCount(int Win)
\r
2031 hWnd = GetLocalHwnd();
\r
2032 if(Win == WIN_REMOTE)
\r
2033 hWnd = GetRemoteHwnd();
\r
2035 return(SendMessage(hWnd, LVM_GETSELECTEDCOUNT, 0, 0));
\r
2039 /*-----
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8dÅ
\8f\89\82Ì
\83A
\83C
\83e
\83\80\94Ô
\8d\86\82ð
\95Ô
\82· --------------------------------
\r
2042 * int Win :
\83E
\83B
\83\93\83h
\83E
\94Ô
\8d\86 (WIN_xxxx)
\r
2043 * int All :
\91I
\82Î
\82ê
\82Ä
\82¢
\82È
\82¢
\82à
\82Ì
\82ð
\8aÜ
\82ß
\82é
\r
2046 * int
\83A
\83C
\83e
\83\80\94Ô
\8d\86\r
2047 * -1 =
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82È
\82¢
\r
2048 *----------------------------------------------------------------------------*/
\r
2050 int GetFirstSelected(int Win, int All)
\r
2055 hWnd = GetLocalHwnd();
\r
2056 if(Win == WIN_REMOTE)
\r
2057 hWnd = GetRemoteHwnd();
\r
2059 Ope = LVNI_SELECTED;
\r
2063 return(SendMessage(hWnd, LVM_GETNEXTITEM, (WPARAM)-1, (LPARAM)MAKELPARAM(Ope, 0)));
\r
2067 /*-----
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8e\9f\82Ì
\83A
\83C
\83e
\83\80\94Ô
\8d\86\82ð
\95Ô
\82· ----------------------------------
\r
2070 * int Win :
\83E
\83B
\83\93\83h
\83E
\94Ô
\8d\86 (WIN_xxxx)
\r
2071 * int Pos :
\8d¡
\82Ì
\83A
\83C
\83e
\83\80\94Ô
\8d\86\r
2072 * int All :
\91I
\82Î
\82ê
\82Ä
\82¢
\82È
\82¢
\82à
\82Ì
\82à
\8aÜ
\82ß
\82é
\r
2075 * int
\83A
\83C
\83e
\83\80\94Ô
\8d\86\r
2076 * -1 =
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82È
\82¢
\r
2077 *----------------------------------------------------------------------------*/
\r
2079 int GetNextSelected(int Win, int Pos, int All)
\r
2084 hWnd = GetLocalHwnd();
\r
2085 if(Win == WIN_REMOTE)
\r
2086 hWnd = GetRemoteHwnd();
\r
2088 Ope = LVNI_SELECTED;
\r
2092 return(SendMessage(hWnd, LVM_GETNEXTITEM, (WPARAM)Pos, (LPARAM)MAKELPARAM(Ope, 0)));
\r
2096 /*-----
\8ew
\92è
\82³
\82ê
\82½
\96¼
\91O
\82Ì
\83A
\83C
\83e
\83\80\82ð
\92T
\82· ----------------------------------------
\r
2099 * int Win :
\83E
\83C
\83\93\83h
\83E
\94Ô
\8d\86 (WIN_xxx)
\r
2100 * char *Name :
\96¼
\91O
\r
2103 * int
\83A
\83C
\83e
\83\80\94Ô
\8d\86\r
2104 * -1=
\8c©
\82Â
\82©
\82ç
\82È
\82©
\82Á
\82½
\r
2105 *----------------------------------------------------------------------------*/
\r
2107 int FindNameNode(int Win, char *Name)
\r
2109 LV_FINDINFO FindInfo;
\r
2112 hWnd = GetLocalHwnd();
\r
2113 if(Win == WIN_REMOTE)
\r
2114 hWnd = GetRemoteHwnd();
\r
2116 FindInfo.flags = LVFI_STRING;
\r
2117 FindInfo.psz = Name;
\r
2118 return(SendMessage(hWnd, LVM_FINDITEM, -1, (LPARAM)&FindInfo));
\r
2122 /*-----
\8ew
\92è
\88Ê
\92u
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\96¼
\91O
\82ð
\95Ô
\82· ----------------------------------------
\r
2125 * int Win :
\83E
\83C
\83\93\83h
\83E
\94Ô
\8d\86 (WIN_xxx)
\r
2126 * int Pos :
\88Ê
\92u
\r
2127 * char *Buf :
\96¼
\91O
\82ð
\95Ô
\82·
\83o
\83b
\83t
\83@
\r
2128 * int Max :
\83o
\83b
\83t
\83@
\82Ì
\83T
\83C
\83Y
\r
2132 *----------------------------------------------------------------------------*/
\r
2134 void GetNodeName(int Win, int Pos, char *Buf, int Max)
\r
2139 hWnd = GetLocalHwnd();
\r
2140 if(Win == WIN_REMOTE)
\r
2141 hWnd = GetRemoteHwnd();
\r
2143 LvItem.mask = LVIF_TEXT;
\r
2144 LvItem.iItem = Pos;
\r
2145 LvItem.iSubItem = 0;
\r
2146 LvItem.pszText = Buf;
\r
2147 LvItem.cchTextMax = Max;
\r
2148 SendMessage(hWnd, LVM_GETITEM, 0, (LPARAM)&LvItem);
\r
2153 /*-----
\8ew
\92è
\88Ê
\92u
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\93ú
\95t
\82ð
\95Ô
\82· ----------------------------------------
\r
2156 * int Win :
\83E
\83C
\83\93\83h
\83E
\94Ô
\8d\86 (WIN_xxx)
\r
2157 * int Pos :
\88Ê
\92u
\r
2158 * FILETIME *Buf :
\93ú
\95t
\82ð
\95Ô
\82·
\83o
\83b
\83t
\83@
\r
2161 * int
\83X
\83e
\81[
\83^
\83X
\r
2162 * YES/NO=
\93ú
\95t
\8fî
\95ñ
\82ª
\82È
\82©
\82Á
\82½
\r
2163 *----------------------------------------------------------------------------*/
\r
2165 int GetNodeTime(int Win, int Pos, FILETIME *Buf)
\r
2172 hWnd = GetLocalHwnd();
\r
2173 if(Win == WIN_REMOTE)
\r
2174 hWnd = GetRemoteHwnd();
\r
2176 LvItem.mask = LVIF_TEXT;
\r
2177 LvItem.iItem = Pos;
\r
2178 LvItem.iSubItem = 1;
\r
2179 LvItem.pszText = Tmp;
\r
2180 LvItem.cchTextMax = 20;
\r
2181 SendMessage(hWnd, LVM_GETITEM, 0, (LPARAM)&LvItem);
\r
2182 Ret = TimeString2FileTime(Tmp, Buf);
\r
2187 /*-----
\8ew
\92è
\88Ê
\92u
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\83T
\83C
\83Y
\82ð
\95Ô
\82· --------------------------------------
\r
2190 * int Win :
\83E
\83C
\83\93\83h
\83E
\94Ô
\8d\86 (WIN_xxx)
\r
2191 * int Pos :
\88Ê
\92u
\r
2192 * int *Buf :
\83T
\83C
\83Y
\82ð
\95Ô
\82·
\83\8f\81[
\83N
\r
2195 * int
\83X
\83e
\81[
\83^
\83X
\r
2196 * YES/NO=
\83T
\83C
\83Y
\8fî
\95ñ
\82ª
\82È
\82©
\82Á
\82½
\r
2197 *----------------------------------------------------------------------------*/
\r
2199 int GetNodeSize(int Win, int Pos, LONGLONG *Buf)
\r
2206 hWnd = GetLocalHwnd();
\r
2207 if(Win == WIN_REMOTE)
\r
2208 hWnd = GetRemoteHwnd();
\r
2210 LvItem.mask = LVIF_TEXT;
\r
2211 LvItem.iItem = Pos;
\r
2212 LvItem.iSubItem = 2;
\r
2213 LvItem.pszText = Tmp;
\r
2214 LvItem.cchTextMax = 20;
\r
2215 SendMessage(hWnd, LVM_GETITEM, 0, (LPARAM)&LvItem);
\r
2218 if(strlen(Tmp) > 0)
\r
2221 *Buf = _atoi64(Tmp);
\r
2228 /*-----
\8ew
\92è
\88Ê
\92u
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\91®
\90«
\82ð
\95Ô
\82· ----------------------------------------
\r
2231 * int Win :
\83E
\83C
\83\93\83h
\83E
\94Ô
\8d\86 (WIN_xxx)
\r
2232 * int Pos :
\88Ê
\92u
\r
2233 * int *Buf :
\91®
\90«
\82ð
\95Ô
\82·
\83\8f\81[
\83N
\r
2236 * int
\83X
\83e
\81[
\83^
\83X
\r
2237 * YES/NO=
\83T
\83C
\83Y
\8fî
\95ñ
\82ª
\82È
\82©
\82Á
\82½
\r
2238 *----------------------------------------------------------------------------*/
\r
2240 int GetNodeAttr(int Win, int Pos, int *Buf)
\r
2248 if(Win == WIN_REMOTE)
\r
2250 LvItem.mask = LVIF_TEXT;
\r
2251 LvItem.iItem = Pos;
\r
2252 LvItem.iSubItem = 4;
\r
2253 LvItem.pszText = Tmp;
\r
2254 LvItem.cchTextMax = 20;
\r
2255 SendMessage(GetRemoteHwnd(), LVM_GETITEM, 0, (LPARAM)&LvItem);
\r
2256 if(strlen(Tmp) > 0)
\r
2258 *Buf = AttrString2Value(Tmp);
\r
2266 /*-----
\8ew
\92è
\88Ê
\92u
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\83^
\83C
\83v
\82ð
\95Ô
\82· --------------------------------------
\r
2269 * int Win :
\83E
\83C
\83\93\83h
\83E
\94Ô
\8d\86 (WIN_xxx)
\r
2270 * int Pos :
\88Ê
\92u
\r
2273 * int
\83^
\83C
\83v (NODE_xxx)
\r
2274 *----------------------------------------------------------------------------*/
\r
2276 int GetNodeType(int Win, int Pos)
\r
2283 hWnd = GetLocalHwnd();
\r
2284 if(Win == WIN_REMOTE)
\r
2285 hWnd = GetRemoteHwnd();
\r
2287 LvItem.mask = LVIF_TEXT;
\r
2288 LvItem.iItem = Pos;
\r
2289 LvItem.iSubItem = 2;
\r
2290 LvItem.pszText = Tmp;
\r
2291 LvItem.cchTextMax = 20;
\r
2292 SendMessage(hWnd, LVM_GETITEM, 0, (LPARAM)&LvItem);
\r
2294 if(strcmp(Tmp, "<DIR>") == 0)
\r
2296 else if(strcmp(Tmp, "<DRIVE>") == 0)
\r
2305 /*-----
\8ew
\92è
\88Ê
\92u
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\83I
\81[
\83i
\96¼
\82ð
\95Ô
\82· ------------------------------------
\r
2308 * int Win :
\83E
\83C
\83\93\83h
\83E
\94Ô
\8d\86 (WIN_xxx)
\r
2309 * int Pos :
\88Ê
\92u
\r
2310 * char *Buf :
\83I
\81[
\83i
\96¼
\82ð
\95Ô
\82·
\83o
\83b
\83t
\83@
\r
2311 * int Max :
\83o
\83b
\83t
\83@
\82Ì
\83T
\83C
\83Y
\r
2315 *----------------------------------------------------------------------------*/
\r
2317 void GetNodeOwner(int Win, int Pos, char *Buf, int Max)
\r
2322 if(Win == WIN_REMOTE)
\r
2324 LvItem.mask = LVIF_TEXT;
\r
2325 LvItem.iItem = Pos;
\r
2326 LvItem.iSubItem = 5;
\r
2327 LvItem.pszText = Buf;
\r
2328 LvItem.cchTextMax = Max;
\r
2329 SendMessage(GetRemoteHwnd(), LVM_GETITEM, 0, (LPARAM)&LvItem);
\r
2335 /*-----
\83z
\83X
\83g
\91¤
\82Ì
\83t
\83@
\83C
\83\8b\88ê
\97\97\83E
\83C
\83\93\83h
\83E
\82ð
\83N
\83\8a\83A ------------------------------
\r
2342 *----------------------------------------------------------------------------*/
\r
2344 void EraseRemoteDirForWnd(void)
\r
2346 SendMessage(GetRemoteHwnd(), LVM_DELETEALLITEMS, 0, 0);
\r
2347 SendMessage(GetRemoteHistHwnd(), CB_RESETCONTENT, 0, 0);
\r
2352 /*-----
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83t
\83@
\83C
\83\8b\82Ì
\91\8d\83T
\83C
\83Y
\82ð
\95Ô
\82· --------------------------------
\r
2355 * int Win :
\83E
\83C
\83\93\83h
\83E
\94Ô
\8d\86 (WIN_xxx)
\r
2358 * double
\83T
\83C
\83Y
\r
2359 *----------------------------------------------------------------------------*/
\r
2361 double GetSelectedTotalSize(int Win)
\r
2368 if(GetSelectedCount(Win) > 0)
\r
2370 Pos = GetFirstSelected(Win, NO);
\r
2373 GetNodeSize(Win, Pos, &Size);
\r
2376 Pos = GetNextSelected(Win, Pos, NO);
\r
2384 /*===================================================================
\r
2386 ===================================================================*/
\r
2390 /*-----
\83t
\83@
\83C
\83\8b\88ê
\97\97\82Å
\91I
\82Î
\82ê
\82Ä
\82¢
\82é
\83t
\83@
\83C
\83\8b\82ð
\83\8a\83X
\83g
\82É
\93o
\98^
\82·
\82é ------------------
\r
2393 * int Win :
\83E
\83C
\83\93\83h
\83E
\94Ô
\8d\86 (WIN_xxx)
\r
2394 * int Expand :
\83T
\83u
\83f
\83B
\83\8c\83N
\83g
\83\8a\82ð
\93W
\8aJ
\82·
\82é (YES/NO)
\r
2395 * int All :
\91I
\82Î
\82ê
\82Ä
\82¢
\82È
\82¢
\82à
\82Ì
\82à
\82·
\82×
\82Ä
\93o
\98^
\82·
\82é (YES/NO)
\r
2396 * FILELIST **Base :
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
2400 *----------------------------------------------------------------------------*/
\r
2402 void MakeSelectedFileList(int Win, int Expand, int All, FILELIST **Base, int *CancelCheckWork)
\r
2405 char Name[FMAX_PATH+1];
\r
2406 char Cur[FMAX_PATH+1];
\r
2412 if((All == YES) || (GetSelectedCount(Win) > 0))
\r
2414 /*=====
\83J
\83\8c\83\93\83g
\83f
\83B
\83\8c\83N
\83g
\83\8a\82Ì
\83t
\83@
\83C
\83\8b =====*/
\r
2416 Pos = GetFirstSelected(Win, All);
\r
2419 Node = GetNodeType(Win, Pos);
\r
2420 if((Node == NODE_FILE) ||
\r
2421 ((Expand == NO) && (Node == NODE_DIR)))
\r
2423 Pkt.InfoExist = 0;
\r
2424 GetNodeName(Win, Pos, Pkt.File, FMAX_PATH);
\r
2425 if(GetNodeSize(Win, Pos, &Pkt.Size) == YES)
\r
2426 Pkt.InfoExist |= FINFO_SIZE;
\r
2427 if(GetNodeAttr(Win, Pos, &Pkt.Attr) == YES)
\r
2428 Pkt.InfoExist |= FINFO_ATTR;
\r
2429 if(GetNodeTime(Win, Pos, &Pkt.Time) == YES)
\r
2430 Pkt.InfoExist |= (FINFO_TIME | FINFO_DATE);
\r
2434 if((DispIgnoreHide == YES) && (Win == WIN_LOCAL))
\r
2436 AskLocalCurDir(Cur, FMAX_PATH);
\r
2438 strcat(Cur, Pkt.File);
\r
2439 Attr = GetFileAttributes(Cur);
\r
2440 if((Attr != 0xFFFFFFFF) && (Attr & FILE_ATTRIBUTE_HIDDEN))
\r
2445 AddFileList(&Pkt, Base);
\r
2447 Pos = GetNextSelected(Win, Pos, All);
\r
2452 /*=====
\83f
\83B
\83\8c\83N
\83g
\83\8a\83c
\83\8a\81[ =====*/
\r
2454 Pos = GetFirstSelected(Win, All);
\r
2457 if(GetNodeType(Win, Pos) == NODE_DIR)
\r
2459 GetNodeName(Win, Pos, Name, FMAX_PATH);
\r
2460 strcpy(Pkt.File, Name);
\r
2461 ReplaceAll(Pkt.File, '\\', '/');
\r
2465 if((DispIgnoreHide == YES) && (Win == WIN_LOCAL))
\r
2467 AskLocalCurDir(Cur, FMAX_PATH);
\r
2469 strcat(Cur, Pkt.File);
\r
2470 ReplaceAll(Cur, '/', '\\');
\r
2471 Attr = GetFileAttributes(Cur);
\r
2472 if((Attr != 0xFFFFFFFF) && (Attr & FILE_ATTRIBUTE_HIDDEN))
\r
2478 Pkt.Node = NODE_DIR;
\r
2481 memset(&Pkt.Time, 0, sizeof(FILETIME));
\r
2482 AddFileList(&Pkt, Base);
\r
2484 if(Win == WIN_LOCAL)
\r
2485 MakeLocalTree(Name, Base);
\r
2488 AskRemoteCurDir(Cur, FMAX_PATH);
\r
2490 if((AskListCmdMode() == NO) &&
\r
2491 (AskUseNLST_R() == YES))
\r
2492 MakeRemoteTree1(Name, Cur, Base, CancelCheckWork);
\r
2494 MakeRemoteTree2(Name, Cur, Base, CancelCheckWork);
\r
2496 //DispListList(*Base, "LIST");
\r
2501 Pos = GetNextSelected(Win, Pos, All);
\r
2509 /*
\83f
\83o
\83b
\83O
\97p */
\r
2510 /*
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\93à
\97e
\82ð
\95\
\8e¦ */
\r
2511 static void DispListList(FILELIST *Pos, char *Title)
\r
2513 DoPrintf("############ %s ############", Title);
\r
2514 while(Pos != NULL)
\r
2516 DoPrintf("%d %s", Pos->Node, Pos->File);
\r
2519 DoPrintf("############ END ############");
\r
2524 /*----- Drag&Drop
\82³
\82ê
\82½
\83t
\83@
\83C
\83\8b\82ð
\83\8a\83X
\83g
\82É
\93o
\98^
\82·
\82é -----------------------------
\r
2527 * WPARAM wParam :
\83h
\83\8d\83b
\83v
\82³
\82ê
\82½
\83t
\83@
\83C
\83\8b\82Ì
\8fî
\95ñ
\r
2528 * char *Cur :
\83J
\83\8c\83\93\83g
\83f
\83B
\83\8c\83N
\83g
\83\8a\82ð
\95Ô
\82·
\83o
\83b
\83t
\83@
\r
2529 * FILELIST **Base :
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
2533 *----------------------------------------------------------------------------*/
\r
2535 void MakeDroppedFileList(WPARAM wParam, char *Cur, FILELIST **Base)
\r
2539 char Name[FMAX_PATH+1];
\r
2540 char Tmp[FMAX_PATH+1];
\r
2543 WIN32_FIND_DATA Find;
\r
2545 Max = DragQueryFile((HDROP)wParam, 0xFFFFFFFF, NULL, 0);
\r
2547 DragQueryFile((HDROP)wParam, 0, Cur, FMAX_PATH);
\r
2550 for(i = 0; i < Max; i++)
\r
2552 DragQueryFile((HDROP)wParam, i, Name, FMAX_PATH);
\r
2554 if((GetFileAttributes(Name) & FILE_ATTRIBUTE_DIRECTORY) == 0)
\r
2556 Pkt.Node = NODE_FILE;
\r
2557 strcpy(Pkt.File, GetFileName(Name));
\r
2559 memset(&Pkt.Time, 0, sizeof(FILETIME));
\r
2560 if((fHnd = FindFirstFile(Name, &Find)) != INVALID_HANDLE_VALUE)
\r
2563 Pkt.Time = Find.ftLastWriteTime;
\r
2565 AddFileList(&Pkt, Base);
\r
2569 GetCurrentDirectory(FMAX_PATH, Tmp);
\r
2570 SetCurrentDirectory(Cur);
\r
2571 for(i = 0; i < Max; i++)
\r
2573 DragQueryFile((HDROP)wParam, i, Name, FMAX_PATH);
\r
2575 if(GetFileAttributes(Name) & FILE_ATTRIBUTE_DIRECTORY)
\r
2577 Pkt.Node = NODE_DIR;
\r
2578 strcpy(Pkt.File, GetFileName(Name));
\r
2579 AddFileList(&Pkt, Base);
\r
2581 MakeLocalTree(Pkt.File, Base);
\r
2584 SetCurrentDirectory(Tmp);
\r
2586 DragFinish((HDROP)wParam);
\r
2592 /*----- Drag&Drop
\82³
\82ê
\82½
\83t
\83@
\83C
\83\8b\82ª
\82 \82é
\83t
\83H
\83\8b\83_
\82ð
\8eæ
\93¾
\82·
\82é -----------------------
\r
2595 * WPARAM wParam :
\83h
\83\8d\83b
\83v
\82³
\82ê
\82½
\83t
\83@
\83C
\83\8b\82Ì
\8fî
\95ñ
\r
2596 * char *Cur :
\83J
\83\8c\83\93\83g
\83f
\83B
\83\8c\83N
\83g
\83\8a\82ð
\95Ô
\82·
\83o
\83b
\83t
\83@
\r
2600 *----------------------------------------------------------------------------*/
\r
2602 void MakeDroppedDir(WPARAM wParam, char *Cur)
\r
2606 Max = DragQueryFile((HDROP)wParam, 0xFFFFFFFF, NULL, 0);
\r
2607 DragQueryFile((HDROP)wParam, 0, Cur, FMAX_PATH);
\r
2609 DragFinish((HDROP)wParam);
\r
2615 /*-----
\83z
\83X
\83g
\91¤
\82Ì
\83T
\83u
\83f
\83B
\83\8c\83N
\83g
\83\8a\88È
\89º
\82Ì
\83t
\83@
\83C
\83\8b\82ð
\83\8a\83X
\83g
\82É
\93o
\98^
\82·
\82é
\81i
\82P
\81j-------
\r
2618 * char *Path :
\83p
\83X
\96¼
\r
2619 * char *Cur :
\83J
\83\8c\83\93\83g
\83f
\83B
\83\8c\83N
\83g
\83\8a\r
2620 * FILELIST **Base :
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
2626 * NLST -alLR
\82ð
\8eg
\82¤
\r
2627 *----------------------------------------------------------------------------*/
\r
2629 static void MakeRemoteTree1(char *Path, char *Cur, FILELIST **Base, int *CancelCheckWork)
\r
2633 if(DoCWD(Path, NO, NO, NO) == FTP_COMPLETE)
\r
2635 /*
\83T
\83u
\83t
\83H
\83\8b\83_
\82à
\8aÜ
\82ß
\82½
\83\8a\83X
\83g
\82ð
\8eæ
\93¾ */
\r
2636 Sts = DoDirListCmdSkt("R", "", 999, CancelCheckWork); /* NLST -alLR*/
\r
2637 DoCWD(Cur, NO, NO, NO);
\r
2639 if(Sts == FTP_COMPLETE)
\r
2640 AddRemoteTreeToFileList(999, Path, RDIR_NLST, Base);
\r
2646 /*-----
\83z
\83X
\83g
\91¤
\82Ì
\83T
\83u
\83f
\83B
\83\8c\83N
\83g
\83\8a\88È
\89º
\82Ì
\83t
\83@
\83C
\83\8b\82ð
\83\8a\83X
\83g
\82É
\93o
\98^
\82·
\82é
\81i
\82Q
\81j-------
\r
2649 * char *Path :
\83p
\83X
\96¼
\r
2650 * char *Cur :
\83J
\83\8c\83\93\83g
\83f
\83B
\83\8c\83N
\83g
\83\8a\r
2651 * FILELIST **Base :
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
2657 *
\8ae
\83t
\83H
\83\8b\83_
\82É
\88Ú
\93®
\82µ
\82Ä
\83\8a\83X
\83g
\82ð
\8eæ
\93¾
\r
2658 *----------------------------------------------------------------------------*/
\r
2660 static void MakeRemoteTree2(char *Path, char *Cur, FILELIST **Base, int *CancelCheckWork)
\r
2663 FILELIST *CurList;
\r
2667 /* VAX VMS
\82Í CWD xxx/yyy
\82Æ
\82¢
\82¤
\8ew
\92è
\82ª
\82Å
\82«
\82È
\82¢
\82Ì
\82Å */
\r
2668 /* CWD xxx, Cwd yyy
\82Æ
\95¡
\90\94\82É
\95ª
\82¯
\82é */
\r
2669 if(AskHostType() != HTYPE_VMS)
\r
2670 Sts = DoCWD(Path, NO, NO, NO);
\r
2673 #if defined(HAVE_OPENVMS)
\r
2674 /* OpenVMS
\82Ì
\8fê
\8d\87\81A
\83f
\83B
\83\8c\83N
\83g
\83\8a\88Ú
\93®
\8e\9e\82Í"HOGE.DIR;1"
\82ð"HOGE"
\82É
\82·
\82é */
\r
2675 ReformVMSDirName(Path, TRUE);
\r
2677 Sts = DoCWDStepByStep(Path, Cur);
\r
2680 if(Sts == FTP_COMPLETE)
\r
2682 Sts = DoDirListCmdSkt("", "", 999, CancelCheckWork); /* NLST -alL*/
\r
2683 DoCWD(Cur, NO, NO, NO);
\r
2685 if(Sts == FTP_COMPLETE)
\r
2688 AddRemoteTreeToFileList(999, Path, RDIR_CWD, &CurList);
\r
2689 CopyTmpListToFileList(Base, CurList);
\r
2692 while(Pos != NULL)
\r
2694 if(Pos->Node == NODE_DIR)
\r
2696 /*
\82Ü
\82¸
\83f
\83B
\83\8c\83N
\83g
\83\8a\96¼
\82ð
\83Z
\83b
\83g */
\r
2697 strcpy(Pkt.File, Pos->File);
\r
2698 Pkt.Node = NODE_DIR;
\r
2701 memset(&Pkt.Time, 0, sizeof(FILETIME));
\r
2702 AddFileList(&Pkt, Base);
\r
2704 /*
\82»
\82Ì
\83f
\83B
\83\8c\83N
\83g
\83\8a\82Ì
\92\86\82ð
\8c\9f\8dõ */
\r
2705 MakeRemoteTree2(Pos->File, Cur, Base, CancelCheckWork);
\r
2709 DeleteFileList(&CurList);
\r
2716 /*-----
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\93à
\97e
\82ð
\95Ê
\82Ì
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82É
\83R
\83s
\81[ ----------------------
\r
2719 * FILELIST **Base :
\83R
\83s
\81[
\90æ
\r
2720 * FILELIST *List :
\83R
\83s
\81[
\8c³
\r
2726 *
\83R
\83s
\81[
\82·
\82é
\82Ì
\82Í
\83t
\83@
\83C
\83\8b\82Ì
\8fî
\95ñ
\82¾
\82¯
\r
2727 *
\83f
\83B
\83\8c\83N
\83g
\83\8a\82Ì
\8fî
\95ñ
\82Í
\83R
\83s
\81[
\82µ
\82È
\82¢
\r
2728 *----------------------------------------------------------------------------*/
\r
2730 static void CopyTmpListToFileList(FILELIST **Base, FILELIST *List)
\r
2732 while(List != NULL)
\r
2734 if(List->Node == NODE_FILE)
\r
2735 AddFileList(List, Base);
\r
2737 List = List->Next;
\r
2743 /*-----
\83z
\83X
\83g
\91¤
\82Ì
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\82ð
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82É
\93o
\98^ --------------------------
\r
2746 * int Num :
\83e
\83\93\83|
\83\89\83\8a\83t
\83@
\83C
\83\8b\82Ì
\83t
\83@
\83C
\83\8b\96¼
\94Ô
\8d\86 (_ffftp.???)
\r
2747 * char *Path :
\83p
\83X
\96¼
\r
2748 * int IncDir :
\8dÄ
\8bA
\8c\9f\8dõ
\82Ì
\95û
\96@ (RDIR_xxx)
\r
2749 * FILELIST **Base :
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
2753 *----------------------------------------------------------------------------*/
\r
2755 void AddRemoteTreeToFileList(int Num, char *Path, int IncDir, FILELIST **Base)
\r
2757 char Str[FMAX_PATH+1];
\r
2758 char Dir[FMAX_PATH+1];
\r
2759 char Name[FMAX_PATH+1];
\r
2767 char Owner[OWNER_NAME_LEN+1];
\r
2771 MakeCacheFileName(Num, Str);
\r
2772 if((fd = fopen(Str, "rb")) != NULL)
\r
2774 strcpy(Dir, Path);
\r
2776 ListType = LIST_UNKNOWN;
\r
2778 while(GetListOneLine(Str, FMAX_PATH, fd) == SUCCESS)
\r
2780 if((ListType = AnalizeFileInfo(Str)) == LIST_UNKNOWN)
\r
2782 if(MakeDirPath(Str, ListType, Path, Dir) == SUCCESS)
\r
2784 if(IncDir == RDIR_NLST)
\r
2786 strcpy(Pkt.File, Dir);
\r
2787 Pkt.Node = NODE_DIR;
\r
2790 memset(&Pkt.Time, 0, sizeof(FILETIME));
\r
2791 AddFileList(&Pkt, Base);
\r
2797 Node = ResolvFileInfo(Str, ListType, Name, &Size, &Time, &Attr, Owner, &Link, &InfoExist);
\r
2799 if(AskFilterStr(Name, Node) == YES)
\r
2801 if((Node == NODE_FILE) ||
\r
2802 ((IncDir == RDIR_CWD) && (Node == NODE_DIR)))
\r
2804 strcpy(Pkt.File, Dir);
\r
2805 if(strlen(Pkt.File) > 0)
\r
2806 SetSlashTail(Pkt.File);
\r
2807 strcat(Pkt.File, Name);
\r
2813 Pkt.InfoExist = InfoExist;
\r
2814 AddFileList(&Pkt, Base);
\r
2825 /*-----
\83t
\83@
\83C
\83\8b\88ê
\97\97\8fî
\95ñ
\82Ì
\82P
\8ds
\82ð
\8eæ
\93¾ ------------------------------------------
\r
2828 * char *Buf :
\82P
\8ds
\82Ì
\8fî
\95ñ
\82ð
\83Z
\83b
\83g
\82·
\82é
\83o
\83b
\83t
\83@
\r
2829 * int Max :
\8dÅ
\91å
\95¶
\8e\9a\90\94\r
2830 * FILE *Fd :
\83X
\83g
\83\8a\81[
\83\80\r
2833 * int
\83X
\83e
\81[
\83^
\83X (SUCCESS/FAIL)
\r
2836 * VAX VMS
\88È
\8aO
\82Ì
\8e\9e\82Í fgets(Buf, Max, Fd)
\82Æ
\93¯
\82¶
\r
2837 * Vax VMS
\82Ì
\8e\9e\82Í
\81A
\95¡
\90\94\8ds
\82Ì
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\82ð
\82P
\8ds
\82É
\82Ü
\82Æ
\82ß
\82é
\r
2838 *----------------------------------------------------------------------------*/
\r
2840 static int GetListOneLine(char *Buf, int Max, FILE *Fd)
\r
2842 char Tmp[FMAX_PATH+1];
\r
2846 while((Sts == FAIL) && (fgets(Buf, Max, Fd) != NULL))
\r
2849 RemoveReturnCode(Buf);
\r
2850 ReplaceAll(Buf, '\x08', ' ');
\r
2852 /* VAX VMS
\82Å
\82Í
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\82ª
\95¡
\90\94\8ds
\82É
\82í
\82©
\82ê
\82Ä
\82¢
\82é */
\r
2853 /*
\82»
\82ê
\82ð
\82P
\8ds
\82É
\82Ü
\82Æ
\82ß
\82é */
\r
2854 if(AskHostType() == HTYPE_VMS)
\r
2856 if(strchr(Buf, ';') == NULL) /*
\83t
\83@
\83C
\83\8b\96¼
\88È
\8aO
\82Ì
\8ds */
\r
2860 Max -= strlen(Buf);
\r
2861 while(strchr(Buf, ')') == NULL)
\r
2863 if(fgets(Tmp, FMAX_PATH, Fd) != NULL)
\r
2865 RemoveReturnCode(Tmp);
\r
2866 ReplaceAll(Buf, '\x08', ' ');
\r
2867 if((int)strlen(Tmp) > Max)
\r
2869 Max -= strlen(Tmp);
\r
2879 // DoPrintf("List : %s", Buf);
\r
2885 /*-----
\83T
\83u
\83f
\83B
\83\8c\83N
\83g
\83\8a\8fî
\95ñ
\82Ì
\89ð
\90Í --------------------------------------------
\r
2888 * char *Str :
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\81i
\82P
\8ds
\81j
\r
2889 * int ListType :
\83\8a\83X
\83g
\82Ì
\83^
\83C
\83v
\r
2890 * char *Path :
\90æ
\93ª
\82©
\82ç
\82Ì
\83p
\83X
\96¼
\r
2891 * char *Dir :
\83f
\83B
\83\8c\83N
\83g
\83\8a\96¼
\r
2894 * int
\83X
\83e
\81[
\83^
\83X
\r
2895 * SUCCESS/FAIL=
\83f
\83B
\83\8c\83N
\83g
\83\8a\8fî
\95ñ
\82Å
\82È
\82¢
\r
2896 *----------------------------------------------------------------------------*/
\r
2898 static int MakeDirPath(char *Str, int ListType, char *Path, char *Dir)
\r
2906 case LIST_ACOS_4 :
\r
2910 if(*(Str + strlen(Str) - 1) == ':') /*
\8dÅ
\8cã
\82ª :
\82È
\82ç
\83T
\83u
\83f
\83B
\83\8c\83N
\83g
\83\8a */
\r
2912 if(strcmp(Str, ".:") != 0)
\r
2914 if((strncmp(Str, "./", 2) == 0) ||
\r
2915 (strncmp(Str, ".\\", 2) == 0))
\r
2920 if(strlen(Str) > 1)
\r
2922 strcpy(Dir, Path);
\r
2923 SetSlashTail(Dir);
\r
2925 *(Dir + strlen(Dir) - 1) = NUL;
\r
2927 ChangeFnameRemote2Local(Dir, FMAX_PATH);
\r
2929 ReplaceAll(Dir, '\\', '/');
\r
2940 /*-----
\83\8d\81[
\83J
\83\8b\91¤
\82Ì
\83T
\83u
\83f
\83B
\83\8c\83N
\83g
\83\8a\88È
\89º
\82Ì
\83t
\83@
\83C
\83\8b\82ð
\83\8a\83X
\83g
\82É
\93o
\98^
\82·
\82é ----------
\r
2943 * char *Path :
\83p
\83X
\96¼
\r
2944 * FILELIST **Base :
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
2948 *----------------------------------------------------------------------------*/
\r
2950 static void MakeLocalTree(char *Path, FILELIST **Base)
\r
2952 char Src[FMAX_PATH+1];
\r
2954 WIN32_FIND_DATA FindBuf;
\r
2956 SYSTEMTIME TmpStime;
\r
2958 strcpy(Src, Path);
\r
2961 ReplaceAll(Src, '/', '\\');
\r
2963 if((fHnd = FindFirstFileAttr(Src, &FindBuf, DispIgnoreHide)) != INVALID_HANDLE_VALUE)
\r
2967 if((FindBuf.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
\r
2969 if(AskFilterStr(FindBuf.cFileName, NODE_FILE) == YES)
\r
2971 strcpy(Pkt.File, Path);
\r
2972 SetSlashTail(Pkt.File);
\r
2973 strcat(Pkt.File, FindBuf.cFileName);
\r
2974 ReplaceAll(Pkt.File, '\\', '/');
\r
2975 Pkt.Node = NODE_FILE;
\r
2976 Pkt.Size = MakeLongLong(FindBuf.nFileSizeHigh, FindBuf.nFileSizeLow);
\r
2978 Pkt.Time = FindBuf.ftLastWriteTime;
\r
2979 FileTimeToSystemTime(&Pkt.Time, &TmpStime);
\r
2980 TmpStime.wSecond = 0;
\r
2981 TmpStime.wMilliseconds = 0;
\r
2982 SystemTimeToFileTime(&TmpStime, &Pkt.Time);
\r
2983 AddFileList(&Pkt, Base);
\r
2987 while(FindNextFileAttr(fHnd, &FindBuf, DispIgnoreHide) == TRUE);
\r
2991 if((fHnd = FindFirstFileAttr(Src, &FindBuf, DispIgnoreHide)) != INVALID_HANDLE_VALUE)
\r
2995 if((FindBuf.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
\r
2996 (strcmp(FindBuf.cFileName, ".") != 0) &&
\r
2997 (strcmp(FindBuf.cFileName, "..") != 0))
\r
2999 strcpy(Src, Path);
\r
3001 strcat(Src, FindBuf.cFileName);
\r
3002 strcpy(Pkt.File, Src);
\r
3003 ReplaceAll(Pkt.File, '\\', '/');
\r
3004 Pkt.Node = NODE_DIR;
\r
3007 memset(&Pkt.Time, 0, sizeof(FILETIME));
\r
3008 AddFileList(&Pkt, Base);
\r
3010 MakeLocalTree(Src, Base);
\r
3013 while(FindNextFileAttr(fHnd, &FindBuf, DispIgnoreHide) == TRUE);
\r
3020 /*-----
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82É
\8fî
\95ñ
\82ð
\93o
\98^
\82·
\82é ----------------------------------------
\r
3023 * FILELIST *Pkt :
\93o
\98^
\82·
\82é
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
3024 * FILELIST **Base :
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
3028 *----------------------------------------------------------------------------*/
\r
3030 static void AddFileList(FILELIST *Pkt, FILELIST **Base)
\r
3035 DoPrintf("FileList : NODE=%d : %s", Pkt->Node, Pkt->File);
\r
3037 /*
\83\8a\83X
\83g
\82Ì
\8fd
\95¡
\82ð
\8eæ
\82è
\8f\9c\82 */
\r
3039 while(Pos != NULL)
\r
3041 if(strcmp(Pkt->File, Pos->File) == 0)
\r
3043 DoPrintf(" --> Duplicate!!");
\r
3050 if(Pos == NULL) /*
\8fd
\95¡
\82µ
\82Ä
\82¢
\82È
\82¢
\82Ì
\82Å
\93o
\98^
\82·
\82é */
\r
3052 if((Pos = malloc(sizeof(FILELIST))) != NULL)
\r
3054 memcpy(Pos, Pkt, sizeof(FILELIST));
\r
3067 /*-----
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82ð
\83N
\83\8a\83A
\82·
\82é --------------------------------------------
\r
3070 * FILELIST **Base :
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
3074 *----------------------------------------------------------------------------*/
\r
3076 void DeleteFileList(FILELIST **Base)
\r
3082 while(New != NULL)
\r
3093 /*-----
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82É
\8ew
\92è
\82Ì
\83t
\83@
\83C
\83\8b\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N ------------------------
\r
3096 * char *Fname :
\83t
\83@
\83C
\83\8b\96¼
\r
3097 * FILELIST *Base :
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
3098 * int Caps :
\91å
\95¶
\8e\9a/
\8f¬
\95¶
\8e\9a\82Ì
\8bæ
\95Ê
\83\82\81[
\83h (COMP_xxx)
\r
3101 * FILELIST *
\8c©
\82Â
\82©
\82Á
\82½
\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82Ì
\83f
\81[
\83^
\r
3102 * NULL=
\8c©
\82Â
\82©
\82ç
\82È
\82¢
\r
3103 *----------------------------------------------------------------------------*/
\r
3105 FILELIST *SearchFileList(char *Fname, FILELIST *Base, int Caps)
\r
3107 char Tmp[FMAX_PATH+1];
\r
3109 while(Base != NULL)
\r
3111 if(Caps == COMP_STRICT)
\r
3113 if(_mbscmp(Fname, Base->File) == 0)
\r
3118 if(_mbsicmp(Fname, Base->File) == 0)
\r
3120 if(Caps == COMP_IGNORE)
\r
3124 strcpy(Tmp, Base->File);
\r
3126 if(_mbscmp(Tmp, Base->File) == 0)
\r
3131 Base = Base->Next;
\r
3137 /*-----
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\82©
\82ç
\83\8a\83X
\83g
\83^
\83C
\83v
\82ð
\8b\81\82ß
\82é ----------------------------------
\r
3140 * char *Str :
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\81i
\82P
\8ds
\81j
\r
3143 * int
\83\8a\83X
\83g
\83^
\83C
\83v (LIST_xxx)
\r
3144 *----------------------------------------------------------------------------*/
\r
3146 static int AnalizeFileInfo(char *Str)
\r
3149 char Tmp[FMAX_PATH+1];
\r
3156 //DoPrintf("LIST : %s", Str);
\r
3158 Ret = LIST_UNKNOWN;
\r
3159 Flag1 = AskHostType();
\r
3160 if(Flag1 == HTYPE_ACOS)
\r
3162 else if(Flag1 == HTYPE_ACOS_4)
\r
3163 Ret = LIST_ACOS_4;
\r
3164 else if(Flag1 == HTYPE_VMS)
\r
3166 else if(Flag1 == HTYPE_IRMX)
\r
3168 else if(Flag1 == HTYPE_STRATUS)
\r
3169 Ret = LIST_STRATUS;
\r
3170 else if(Flag1 == HTYPE_AGILENT)
\r
3171 Ret = LIST_AGILENT;
\r
3172 else if(Flag1 == HTYPE_SHIBASOKU)
\r
3173 Ret = LIST_SHIBASOKU;
\r
3176 /*
\88È
\89º
\82Ì
\83t
\83H
\81[
\83}
\83b
\83g
\82ð
\83`
\83F
\83b
\83N */
\r
3177 /* LIST_UNIX_10, LIST_UNIX_20, LIST_UNIX_12, LIST_UNIX_22, LIST_UNIX_50, LIST_UNIX_60 */
\r
3180 if(FindField(Str, Tmp, 0, NO) == SUCCESS)
\r
3182 /* MELCOM80
\82Í "d rwxrwxrwx"
\82Ì
\82æ
\82¤
\82É
\83X
\83y
\81[
\83X
\82ª
\8bó
\82¢
\82Ä
\82¢
\82é */
\r
3184 if((strlen(Tmp) == 1) && (strchr("-dDlL", Tmp[0]) != NULL))
\r
3186 if(FindField(Str, Tmp, 1, NO) == SUCCESS)
\r
3188 if((strlen(Tmp) == 9) ||
\r
3189 ((strlen(Tmp) > 9) && (IsDigit(Tmp[9]) != 0)))
\r
3191 memmove(Str+1, Str+2, strlen(Str+2)+1);
\r
3192 FindField(Str, Tmp, 0, NO);
\r
3198 if(strlen(Tmp) >= 10)
\r
3201 if((strlen(Tmp) > 10) && (IsDigit(Tmp[10]) != 0))
\r
3203 /*
\82±
\82¤
\82¢
\82¤
\8e\9e */
\r
3204 /* drwxr-xr-x1234 owner group 1024 Nov 6 14:21 Linux/ */
\r
3209 // LIST_UNIX_60 support
\r
3210 if(FindField(Str, Tmp, 7+Add1, NO) == SUCCESS)
\r
3212 GetMonth(Tmp, &Month, &Day);
\r
3215 Ret = CheckUnixType(Str, Tmp, Add1, 2, Day);
\r
3221 // LIST_UNIX_12 support
\r
3222 if((Ret == LIST_UNKNOWN) &&
\r
3223 (FindField(Str, Tmp, 6+Add1, NO) == SUCCESS))
\r
3225 GetMonth(Tmp, &Month, &Day);
\r
3228 Ret = CheckUnixType(Str, Tmp, Add1, 0, Day);
\r
3231 //////////////////
\r
3234 // LIST_UNIX_70 support
\r
3235 if((Ret == LIST_UNKNOWN) &&
\r
3236 (FindField(Str, Tmp, 6+Add1, NO) == SUCCESS))
\r
3238 GetMonth(Tmp, &Month, &Day);
\r
3241 Ret = CheckUnixType(Str, Tmp, Add1, 1, Day);
\r
3246 if((Ret == LIST_UNKNOWN) &&
\r
3247 (FindField(Str, Tmp, 5+Add1, NO) == SUCCESS))
\r
3249 GetMonth(Tmp, &Month, &Day);
\r
3252 Ret = CheckUnixType(Str, Tmp, Add1, 0, Day);
\r
3256 if((Ret == LIST_UNKNOWN) &&
\r
3257 (FindField(Str, Tmp, 4+Add1, NO) == SUCCESS))
\r
3259 GetMonth(Tmp, &Month, &Day);
\r
3262 Ret = CheckUnixType(Str, Tmp, Add1, -1, Day);
\r
3266 if((Ret == LIST_UNKNOWN) &&
\r
3267 (FindField(Str, Tmp, 3+Add1, NO) == SUCCESS))
\r
3269 GetMonth(Tmp, &Month, &Day);
\r
3272 Ret = CheckUnixType(Str, Tmp, Add1, -2, Day);
\r
3276 if((Ret != LIST_UNKNOWN) && (Flag1 == YES))
\r
3277 Ret |= LIST_MELCOM;
\r
3281 /*
\88È
\89º
\82Ì
\83t
\83H
\81[
\83}
\83b
\83g
\82ð
\83`
\83F
\83b
\83N */
\r
3284 if(Ret == LIST_UNKNOWN)
\r
3286 if((FindField(Str, Tmp, 2, NO) == SUCCESS) &&
\r
3287 (CheckYYMMDDformat(Tmp, NUL, NO) != 0))
\r
3289 if((FindField(Str, Tmp, 3, NO) == SUCCESS) &&
\r
3290 (CheckYYMMDDformat(Tmp, NUL, NO) != 0))
\r
3292 if((FindField(Str, Tmp, 1, NO) == SUCCESS) &&
\r
3293 (IsDigit(Tmp[0]) != 0))
\r
3295 if(FindField(Str, Tmp, 5, NO) == SUCCESS)
\r
3304 /*
\88È
\89º
\82Ì
\83t
\83H
\81[
\83}
\83b
\83g
\82ð
\83`
\83F
\83b
\83N */
\r
3307 if(Ret == LIST_UNKNOWN)
\r
3309 if((FindField(Str, Tmp, 5, NO) == SUCCESS) &&
\r
3310 (CheckYYMMDDformat(Tmp, '*', NO) != 0))
\r
3312 if((FindField(Str, Tmp, 2, NO) == SUCCESS) &&
\r
3313 ((IsDigit(Tmp[0]) != 0) || (StrAllSameChar(Tmp, '*') == YES)))
\r
3315 if((FindField(Str, Tmp, 3, NO) == SUCCESS) &&
\r
3316 ((IsDigit(Tmp[0]) != 0) || (StrAllSameChar(Tmp, '*') == YES)))
\r
3318 if((FindField(Str, Tmp, 0, NO) == SUCCESS) &&
\r
3319 (strlen(Tmp) == 4))
\r
3321 if(FindField(Str, Tmp, 6, NO) == SUCCESS)
\r
3331 /*
\88È
\89º
\82Ì
\83t
\83H
\81[
\83}
\83b
\83g
\82ð
\83`
\83F
\83b
\83N */
\r
3334 if(Ret == LIST_UNKNOWN)
\r
3336 if((FindField(Str, Tmp, 1, NO) == SUCCESS) &&
\r
3337 (CheckYYMMDDformat(Tmp, NUL, NO) != 0))
\r
3339 if((FindField(Str, Tmp, 2, NO) == SUCCESS) &&
\r
3340 (CheckYYMMDDformat(Tmp, NUL, NO) != 0))
\r
3342 if((FindField(Str, Tmp, 5, NO) == SUCCESS) &&
\r
3343 (IsDigit(Tmp[0]) != 0))
\r
3345 if(FindField(Str, Tmp, 6, NO) == SUCCESS)
\r
3347 Ret = LIST_GP6000;
\r
3354 /*
\88È
\89º
\82Ì
\83t
\83H
\81[
\83}
\83b
\83g
\82ð
\83`
\83F
\83b
\83N */
\r
3355 /* LIST_DOS_1, LIST_DOS_2 */
\r
3357 if(Ret == LIST_UNKNOWN)
\r
3359 if((FindField(Str, Tmp, 1, NO) == SUCCESS) &&
\r
3360 (CheckHHMMformat(Tmp) == YES))
\r
3362 if((FindField(Str, Tmp, 2, NO) == SUCCESS) &&
\r
3363 ((Tmp[0] == '<') || (IsDigit(Tmp[0]) != 0)))
\r
3365 if(FindField(Str, Tmp, 3, NO) == SUCCESS)
\r
3367 if((FindField(Str, Tmp, 0, NO) == SUCCESS) &&
\r
3368 (CheckYYMMDDformat(Tmp, NUL, YES) != 0))
\r
3370 TmpInt = atoi(Tmp);
\r
3371 if((TmpInt >= 1) && (TmpInt <= 12))
\r
3381 /*
\88È
\89º
\82Ì
\83t
\83H
\81[
\83}
\83b
\83g
\82ð
\83`
\83F
\83b
\83N */
\r
3384 if(Ret == LIST_UNKNOWN)
\r
3386 if((FindField(Str, Tmp, 3, NO) == SUCCESS) &&
\r
3387 (CheckHHMMformat(Tmp) == YES))
\r
3389 if((FindField(Str, Tmp, 1, NO) == SUCCESS) &&
\r
3390 ((Tmp[0] == '<') || (IsDigit(Tmp[0]) != 0)))
\r
3392 if((FindField(Str, Tmp, 2, NO) == SUCCESS) &&
\r
3393 (CheckYYMMDDformat(Tmp, NUL, YES) != 0))
\r
3401 /*
\88È
\89º
\82Ì
\83t
\83H
\81[
\83}
\83b
\83g
\82ð
\83`
\83F
\83b
\83N */
\r
3404 if(Ret == LIST_UNKNOWN)
\r
3406 if((FindField(Str, Tmp, 0, NO) == SUCCESS) &&
\r
3407 (CheckYYYYMMDDformat(Tmp, NUL) == YES))
\r
3409 if((FindField(Str, Tmp, 1, NO) == SUCCESS) &&
\r
3410 (CheckYYMMDDformat(Tmp, NUL, NO) != 0))
\r
3412 if((FindField(Str, Tmp, 2, NO) == SUCCESS) &&
\r
3413 ((Tmp[0] == '<') || (IsDigit(Tmp[0]) != 0)))
\r
3415 if(FindField(Str, Tmp, 3, NO) == SUCCESS)
\r
3424 /*
\88È
\89º
\82Ì
\83t
\83H
\81[
\83}
\83b
\83g
\82ð
\83`
\83F
\83b
\83N */
\r
3425 /* LIST_CHAMELEON */
\r
3427 if(Ret == LIST_UNKNOWN)
\r
3429 if(FindField(Str, Tmp, 2, NO) == SUCCESS)
\r
3431 GetMonth(Tmp, &Month, &Day);
\r
3432 if((Month != 0) && (Day == 0))
\r
3434 if((FindField(Str, Tmp, 1, NO) == SUCCESS) &&
\r
3435 ((Tmp[0] == '<') || (IsDigit(Tmp[0]) != 0)))
\r
3437 if((FindField(Str, Tmp, 5, NO) == SUCCESS) &&
\r
3438 (CheckHHMMformat(Tmp) == YES))
\r
3440 Ret = LIST_CHAMELEON;
\r
3447 /*
\88È
\89º
\82Ì
\83t
\83H
\81[
\83}
\83b
\83g
\82ð
\83`
\83F
\83b
\83N */
\r
3450 if(Ret == LIST_UNKNOWN)
\r
3452 if((FindField(Str, Tmp, 3, NO) == SUCCESS) &&
\r
3453 (CheckHHMMformat(Tmp) == YES))
\r
3455 if((FindField(Str, Tmp, 0, NO) == SUCCESS) &&
\r
3456 (IsDigit(Tmp[0]) != 0))
\r
3458 if((FindField(Str, Tmp, 2, NO) == SUCCESS) &&
\r
3459 (CheckYYMMDDformat(Tmp, NUL, YES) != 0))
\r
3461 if(FindField(Str, Tmp, 4, NO) == SUCCESS)
\r
3470 /*
\88È
\89º
\82Ì
\83t
\83H
\81[
\83}
\83b
\83g
\82ð
\83`
\83F
\83b
\83N */
\r
3473 if(Ret == LIST_UNKNOWN)
\r
3475 if((FindField(Str, Tmp, 0, NO) == SUCCESS) &&
\r
3476 (strlen(Tmp) == 10))
\r
3478 if((FindField(Str, Tmp, 3, NO) == SUCCESS) &&
\r
3479 (CheckYYMMDDformat(Tmp, NUL, NO) != 0))
\r
3481 if((FindField(Str, Tmp, 4, NO) == SUCCESS) &&
\r
3482 (CheckYYMMDDformat(Tmp, NUL, NO) != 0))
\r
3484 if((FindField(Str, Tmp, 2, NO) == SUCCESS) &&
\r
3485 (IsDigit(Tmp[0]) != 0))
\r
3487 if(FindField(Str, Tmp, 5, NO) == SUCCESS)
\r
3494 else if((FindField(Str, Tmp, 1, NO) == SUCCESS) &&
\r
3495 (CheckYYMMDDformat(Tmp, NUL, NO) != 0))
\r
3497 if((FindField(Str, Tmp, 2, NO) == SUCCESS) &&
\r
3498 (CheckYYMMDDformat(Tmp, NUL, NO) != 0))
\r
3500 if(FindField(Str, Tmp, 3, NO) == SUCCESS)
\r
3509 /*
\88È
\89º
\82Ì
\83t
\83H
\81[
\83}
\83b
\83g
\82ð
\83`
\83F
\83b
\83N */
\r
3512 if(Ret == LIST_UNKNOWN)
\r
3514 if((FindField(Str, Tmp, 0, NO) == SUCCESS) &&
\r
3515 ((Tmp[0] == '<') || (IsDigit(Tmp[0]) != 0)))
\r
3517 if((FindField(Str, Tmp, 5, NO) == SUCCESS) &&
\r
3518 (CheckHHMMformat(Tmp) == YES))
\r
3520 if(FindField(Str, Tmp, 3, NO) == SUCCESS)
\r
3522 GetMonth(Tmp, &Month, &Day);
\r
3525 if((FindField(Str, Tmp, 6, NO) == SUCCESS) &&
\r
3526 (IsDigit(Tmp[0]) != 0))
\r
3528 Ret = LIST_ALLIED;
\r
3536 /*
\88È
\89º
\82Ì
\83t
\83H
\81[
\83}
\83b
\83g
\82ð
\83`
\83F
\83b
\83N */
\r
3539 if(Ret == LIST_UNKNOWN)
\r
3541 if((FindField(Str, Tmp, 1, NO) == SUCCESS) &&
\r
3542 (CheckYYMMDDformat(Tmp, NUL, NO) != 0))
\r
3544 if((FindField(Str, Tmp, 2, NO) == SUCCESS) &&
\r
3545 (IsDigit(Tmp[0]) != 0) && (strlen(Tmp) == 4))
\r
3547 if((FindField(Str, Tmp, 5, NO) == SUCCESS) &&
\r
3548 (IsDigit(Tmp[0]) != 0))
\r
3550 if(FindField(Str, Tmp, 6, NO) == SUCCESS)
\r
3559 /*
\88È
\89º
\82Ì
\83t
\83H
\81[
\83}
\83b
\83g
\82ð
\83`
\83F
\83b
\83N */
\r
3562 if(Ret == LIST_UNKNOWN)
\r
3564 if((FindField(Str, Tmp, 2, NO) == SUCCESS) &&
\r
3565 (CheckYYYYMMDDformat(Tmp, NUL) == YES))
\r
3567 if((FindField(Str, Tmp, 1, NO) == SUCCESS) && IsDigit(Tmp[0]))
\r
3569 if((FindField(Str, Tmp, 7, NO) == SUCCESS) && IsDigit(Tmp[0]))
\r
3571 if(FindField(Str, Tmp, 9, NO) == SUCCESS)
\r
3582 DoPrintf("ListType=%d", Ret);
\r
3588 /*----- UNIX
\8cn
\83\8a\83X
\83g
\83^
\83C
\83v
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82È
\82¤ ----------------------------------
\r
3591 * char *Str :
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\81i
\82P
\8ds
\81j
\r
3592 * char *Tmp :
\88ê
\8e\9e\83\8f\81[
\83N
\r
3593 * int Add1 :
\89Á
\8eZ
\83p
\83\89\83\81\81[
\83^1
\r
3594 * int Add2 :
\89Á
\8eZ
\83p
\83\89\83\81\81[
\83^2
\r
3595 * int Day :
\93ú (0=
\82±
\82±
\82Å
\8eæ
\93¾
\82·
\82é)
\r
3598 * int
\83\8a\83X
\83g
\83^
\83C
\83v (LIST_xxx)
\r
3599 *----------------------------------------------------------------------------*/
\r
3601 static int CheckUnixType(char *Str, char *Tmp, int Add1, int Add2, int Day)
\r
3610 Ret = LIST_UNKNOWN;
\r
3612 //Day
\82É
\82æ
\82Á
\82ÄAdd3
\82ð
\95Ï
\82¦
\82é
\r
3618 // unix
\8cn
\83`
\83F
\83b
\83N
\r
3620 ((FindField(Str, Tmp, 6+Add1+Add2+Add3, NO) == SUCCESS) &&
\r
3621 ((atoi(Tmp) >= 1) && (atoi(Tmp) <= 31))))
\r
3623 if((FindField(Str, Tmp, 7+Add1+Add2+Add3, NO) == SUCCESS) &&
\r
3624 ((atoi(Tmp) >= 1900) || (GetHourAndMinute(Tmp, &Hour, &Minute) == SUCCESS)))
\r
3626 if(FindField(Str, Tmp, 8+Add1+Add2+Add3, NO) == SUCCESS)
\r
3633 //
\92\86\8d\91\8cêSolaris
\90ê
\97p
\r
3636 if((FindField(Str, Tmp, 7+Add1+Add2+Add3, NO) == SUCCESS) &&
\r
3637 ((atoi(Tmp) >= 1) && (atoi(Tmp) <= 31)))
\r
3639 if((FindField(Str, Tmp, 5+Add1+Add2+Add3, NO) == SUCCESS) &&
\r
3640 (atoi(Tmp) >= 1900))
\r
3642 if((FindField(Str, Tmp, 6+Add1+Add2+Add3, NO) == SUCCESS) &&
\r
3643 (((atoi(Tmp) >= 1) && (atoi(Tmp) <= 9) &&
\r
3644 ((unsigned char)Tmp[1] == 0xD4) &&
\r
3645 ((unsigned char)Tmp[2] == 0xC2)) ||
\r
3646 ((atoi(Tmp) >= 10) && (atoi(Tmp) <= 12) &&
\r
3647 ((unsigned char)Tmp[2] == 0xD4) &&
\r
3648 ((unsigned char)Tmp[3] == 0xC2))))
\r
3650 if(FindField(Str, Tmp, 8+Add1+Add2+Add3, NO) == SUCCESS)
\r
3663 Ret = LIST_UNIX_60;
\r
3665 Ret = LIST_UNIX_64;
\r
3667 Ret = LIST_UNIX_61;
\r
3671 Ret = LIST_UNIX_62;
\r
3673 Ret = LIST_UNIX_65;
\r
3675 Ret = LIST_UNIX_63;
\r
3678 else if(Add2 == 1)
\r
3680 Ret = LIST_UNIX_70;
\r
3682 Ret = LIST_UNIX_74;
\r
3684 Ret = LIST_UNIX_71;
\r
3688 Ret = LIST_UNIX_72;
\r
3690 Ret = LIST_UNIX_75;
\r
3692 Ret = LIST_UNIX_73;
\r
3695 else if(Add2 == 0)
\r
3697 Ret = LIST_UNIX_10;
\r
3699 Ret = LIST_UNIX_14;
\r
3701 Ret = LIST_UNIX_11;
\r
3705 Ret = LIST_UNIX_12;
\r
3707 Ret = LIST_UNIX_15;
\r
3709 Ret = LIST_UNIX_13;
\r
3712 else if(Add2 == -1)
\r
3714 Ret = LIST_UNIX_20;
\r
3716 Ret = LIST_UNIX_24;
\r
3718 Ret = LIST_UNIX_21;
\r
3722 Ret = LIST_UNIX_22;
\r
3724 Ret = LIST_UNIX_25;
\r
3726 Ret = LIST_UNIX_23;
\r
3731 Ret = LIST_UNIX_50;
\r
3733 Ret = LIST_UNIX_54;
\r
3735 Ret = LIST_UNIX_51;
\r
3742 /*----- HH:MM
\8c`
\8e®
\82Ì
\95¶
\8e\9a\97ñ
\82©
\82Ç
\82¤
\82©
\82ð
\83`
\83F
\83b
\83N ----------------------------------
\r
3745 * char *Str :
\95¶
\8e\9a\97ñ
\r
3748 * int
\83X
\83e
\81[
\83^
\83X (YES/NO)
\r
3751 *
\8bæ
\90Ø
\82è
\95¶
\8e\9a\82Í
\89½
\82Å
\82à
\82æ
\82¢
\r
3752 *
\8e\9e\95ª
\82Å
\82È
\82
\82Ä
\82à
\82æ
\82¢
\r
3753 *
\8cã
\82ë
\82É
\97]
\95ª
\82È
\95¶
\8e\9a\82ª
\95t
\82¢
\82Ä
\82¢
\82Ä
\82à
\82æ
\82¢
\r
3754 *----------------------------------------------------------------------------*/
\r
3756 static int CheckHHMMformat(char *Str)
\r
3761 if((strlen(Str) >= 3) &&
\r
3762 (IsDigit(Str[0]) != 0))
\r
3764 if((Str = strchr(Str, ':')) != NULL)
\r
3766 if(IsDigit(*(Str+1)) != 0)
\r
3774 /*----- YY/MM/DD
\8c`
\8e®
\82Ì
\95¶
\8e\9a\97ñ
\82©
\82Ç
\82¤
\82©
\82ð
\83`
\83F
\83b
\83N -------------------------------
\r
3777 * char *Str :
\95¶
\8e\9a\97ñ
\r
3778 * char Sym :
\90\94\8e\9a\82Ì
\91ã
\82í
\82è
\82É
\8eg
\82¦
\82é
\8bL
\8d\86 (NUL=
\90\94\8e\9a\88È
\8aO
\8eg
\82¦
\82È
\82¢)
\r
3779 * int Dig3 : 3
\8c\85\82Ì
\94N
\82ð
\8b\96\89Â
\r
3782 * int
\83X
\83e
\81[
\83^
\83X
\r
3783 * 0 =
\8aY
\93\96\82µ
\82È
\82¢
\r
3784 * 1 = ??/??/??, ??/??/???
\r
3788 *
\8bæ
\90Ø
\82è
\95¶
\8e\9a\82Í
\89½
\82Å
\82à
\82æ
\82¢
\r
3789 *
\94N
\8c\8e\93ú
\82Å
\82È
\82
\82Ä
\82à
\82æ
\82¢
\r
3790 *----------------------------------------------------------------------------*/
\r
3792 static int CheckYYMMDDformat(char *Str, char Sym, int Dig3)
\r
3797 if((strlen(Str) == 8) &&
\r
3798 (IsDigitSym(Str[0], Sym) != 0) && (IsDigitSym(Str[1], Sym) != 0) &&
\r
3799 (IsDigit(Str[2]) == 0) &&
\r
3800 (IsDigitSym(Str[3], Sym) != 0) && (IsDigitSym(Str[4], Sym) != 0) &&
\r
3801 (IsDigit(Str[5]) == 0) &&
\r
3802 (IsDigitSym(Str[6], Sym) != 0) && (IsDigitSym(Str[7], Sym) != 0))
\r
3808 if((strlen(Str) == 9) &&
\r
3809 (IsDigitSym(Str[0], Sym) != 0) && (IsDigitSym(Str[1], Sym) != 0) && (IsDigitSym(Str[2], Sym) != 0) &&
\r
3810 (IsDigit(Str[3]) == 0) &&
\r
3811 (IsDigitSym(Str[4], Sym) != 0) && (IsDigitSym(Str[5], Sym) != 0) &&
\r
3812 (IsDigit(Str[6]) == 0) &&
\r
3813 (IsDigitSym(Str[7], Sym) != 0) && (IsDigitSym(Str[8], Sym) != 0))
\r
3817 else if((strlen(Str) == 9) &&
\r
3818 (IsDigitSym(Str[0], Sym) != 0) && (IsDigitSym(Str[1], Sym) != 0) &&
\r
3819 (IsDigit(Str[2]) == 0) &&
\r
3820 (IsDigitSym(Str[3], Sym) != 0) && (IsDigitSym(Str[4], Sym) != 0) &&
\r
3821 (IsDigit(Str[5]) == 0) &&
\r
3822 (IsDigitSym(Str[6], Sym) != 0) && (IsDigitSym(Str[7], Sym) != 0) && (IsDigitSym(Str[8], Sym) != 0))
\r
3831 /*----- YYYY/MM/DD
\8c`
\8e®
\82Ì
\95¶
\8e\9a\97ñ
\82©
\82Ç
\82¤
\82©
\82ð
\83`
\83F
\83b
\83N -----------------------------
\r
3834 * char *Str :
\95¶
\8e\9a\97ñ
\r
3835 * char Sym :
\90\94\8e\9a\82Ì
\91ã
\82í
\82è
\82É
\8eg
\82¦
\82é
\8bL
\8d\86 (NUL=
\90\94\8e\9a\88È
\8aO
\8eg
\82¦
\82È
\82¢)
\r
3838 * int
\83X
\83e
\81[
\83^
\83X (YES/NO)
\r
3841 *
\8bæ
\90Ø
\82è
\95¶
\8e\9a\82Í
\89½
\82Å
\82à
\82æ
\82¢
\r
3842 *
\94N
\8c\8e\93ú
\82Å
\82È
\82
\82Ä
\82à
\82æ
\82¢
\r
3843 *----------------------------------------------------------------------------*/
\r
3845 static int CheckYYYYMMDDformat(char *Str, char Sym)
\r
3850 if((strlen(Str) == 10) &&
\r
3851 (IsDigitSym(Str[0], Sym) != 0) && (IsDigitSym(Str[1], Sym) != 0) &&
\r
3852 (IsDigitSym(Str[2], Sym) != 0) && (IsDigitSym(Str[3], Sym) != 0) &&
\r
3853 (IsDigit(Str[4]) == 0) &&
\r
3854 (IsDigitSym(Str[5], Sym) != 0) && (IsDigitSym(Str[6], Sym) != 0) &&
\r
3855 (IsDigit(Str[7]) == 0) &&
\r
3856 (IsDigitSym(Str[8], Sym) != 0) && (IsDigitSym(Str[9], Sym) != 0))
\r
3864 /*-----
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\82©
\82ç
\83t
\83@
\83C
\83\8b\96¼
\81A
\83T
\83C
\83Y
\82È
\82Ç
\82ð
\8eæ
\82è
\8fo
\82· ----------------------
\r
3867 * char *Str :
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\81i
\82P
\8ds
\81j
\r
3868 * int ListType :
\83\8a\83X
\83g
\82Ì
\83^
\83C
\83v
\r
3869 * char *Name :
\83t
\83@
\83C
\83\8b\96¼
\82Ì
\83R
\83s
\81[
\90æ
\r
3870 * LONGLONG *Size :
\83T
\83C
\83Y
\82Ì
\83R
\83s
\81[
\90æ
\r
3871 * FILETIME *Time :
\93ú
\95t
\82Ì
\83R
\83s
\81[
\90æ
\r
3872 * int *Attr :
\91®
\90«
\82Ì
\83R
\83s
\81[
\90æ
\r
3873 * char *Owner :
\83I
\81[
\83i
\96¼
\r
3874 * int *Link :
\83\8a\83\93\83N
\82©
\82Ç
\82¤
\82© (YES/NO)
\r
3875 * int *InfoExist :
\8e\9e\8d\8f\82Ì
\8fî
\95ñ
\82ª
\82 \82Á
\82½
\82©
\82Ç
\82¤
\82© (YES/NO)
\r
3878 * int
\8eí
\97Þ (NODE_xxxx)
\r
3879 *----------------------------------------------------------------------------*/
\r
3881 static int ResolvFileInfo(char *Str, int ListType, char *Fname, LONGLONG *Size, FILETIME *Time, int *Attr, char *Owner, int *Link, int *InfoExist)
\r
3884 SYSTEMTIME sTimeNow;
\r
3885 char Buf[FMAX_PATH+1];
\r
3896 static const int DosPos[3][4] = { { 1, 0, 2, 3 }, { 1, 0, 2, 3 }, { 3, 2, 1, 0 } };
\r
3897 static const int DosDate[3][3][2] = { { {0, 0}, {3, 4}, {6, 7} }, { {6, 7}, {0, 0}, {3, 4} }, { {6, 7}, {0, 0}, {3, 4} } };
\r
3898 static const int DosLongFname[3] = { YES, YES, NO };
\r
3900 /*
\82Ü
\82¸
\83N
\83\8a\83A
\82µ
\82Ä
\82¨
\82 */
\r
3905 memset(Owner, NUL, OWNER_NAME_LEN+1);
\r
3906 Time->dwLowDateTime = 0;
\r
3907 Time->dwHighDateTime = 0;
\r
3913 OrgListType = ListType;
\r
3914 ListType &= LIST_MASKFLG;
\r
3920 if(ListType == LIST_DOS_1)
\r
3922 else if(ListType == LIST_DOS_2)
\r
3927 *InfoExist |= (FINFO_DATE | FINFO_SIZE);
\r
3929 /*
\8e\9e\8d\8f */
\r
3930 FindField(Str, Buf, DosPos[offs][0], NO);
\r
3931 if((Pos = strchr(Buf, ':')) != NULL)
\r
3933 *InfoExist |= FINFO_TIME;
\r
3934 sTime.wHour = atoi(Buf);
\r
3935 sTime.wMinute = atoi(Pos+1);
\r
3936 sTime.wSecond = 0;
\r
3937 sTime.wMilliseconds = 0;
\r
3939 if(strlen(Pos) >= 4)
\r
3941 if(tolower(Pos[3]) == 'a')
\r
3943 if(sTime.wHour == 12)
\r
3946 else if(tolower(Pos[3]) == 'p')
\r
3948 if(sTime.wHour != 12)
\r
3949 sTime.wHour += 12;
\r
3955 FindField(Str, Buf, DosPos[offs][1], NO);
\r
3956 if((offs2 = CheckYYMMDDformat(Buf, NUL, YES)) == 0)
\r
3959 sTime.wYear = Assume1900or2000(atoi(Buf + DosDate[offs][0][offs2]));
\r
3960 sTime.wMonth = atoi(Buf + DosDate[offs][1][offs2]);
\r
3961 sTime.wDay = atoi(Buf + DosDate[offs][2][offs2]);
\r
3962 SystemTimeToFileTime(&sTime, Time);
\r
3963 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
3965 /*
\83T
\83C
\83Y */
\r
3966 FindField(Str, Buf, DosPos[offs][2], NO);
\r
3967 *Size = _atoi64(Buf);
\r
3970 if(FindField(Str, Fname, DosPos[offs][3], DosLongFname[offs]) == SUCCESS)
\r
3979 *InfoExist |= (FINFO_TIME | FINFO_DATE | FINFO_SIZE);
\r
3982 FindField(Str, Buf, 0, NO);
\r
3983 sTime.wYear = atoi(Buf);
\r
3984 sTime.wMonth = atoi(Buf+5);
\r
3985 sTime.wDay = atoi(Buf+8);
\r
3987 /*
\8e\9e\8d\8f */
\r
3988 *InfoExist |= FINFO_TIME;
\r
3989 FindField(Str, Buf, 1, NO);
\r
3990 sTime.wHour = atoi(Buf);
\r
3991 sTime.wMinute = atoi(Buf+3);
\r
3992 sTime.wSecond = 0; // atoi(Buf+6);
\r
3993 sTime.wMilliseconds = 0;
\r
3994 SystemTimeToFileTime(&sTime, Time);
\r
3995 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
3997 /*
\83T
\83C
\83Y */
\r
3998 FindField(Str, Buf, 2, NO);
\r
3999 *Size = _atoi64(Buf);
\r
4002 if(FindField(Str, Fname, 3, YES) == SUCCESS)
\r
4011 *InfoExist |= (FINFO_DATE | FINFO_SIZE);
\r
4013 /*
\8e\9e\8d\8f */
\r
4014 FindField(Str, Buf, 3, NO);
\r
4015 if((Pos = strchr(Buf, ':')) != NULL)
\r
4017 *InfoExist |= FINFO_TIME;
\r
4018 sTime.wHour = atoi(Buf);
\r
4019 sTime.wMinute = atoi(Pos+1);
\r
4020 sTime.wSecond = 0;
\r
4021 sTime.wMilliseconds = 0;
\r
4025 FindField(Str, Buf, 2, NO);
\r
4026 sTime.wYear = Assume1900or2000(atoi(Buf+6));
\r
4027 sTime.wMonth = atoi(Buf+0);
\r
4028 sTime.wDay = atoi(Buf+3);
\r
4029 SystemTimeToFileTime(&sTime, Time);
\r
4030 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
4032 /*
\83T
\83C
\83Y */
\r
4033 FindField(Str, Buf, 0, NO);
\r
4034 *Size = _atoi64(Buf);
\r
4037 if(FindField(Str, Fname, 4, YES) == SUCCESS)
\r
4039 FindField(Str, Buf, 1, NO);
\r
4041 if(strstr(Buf, "DIR") != NULL)
\r
4046 case LIST_CHAMELEON :
\r
4047 *InfoExist |= (FINFO_TIME | FINFO_DATE | FINFO_SIZE | FINFO_ATTR);
\r
4050 FindField(Str, Buf, 6, NO);
\r
4051 strcat(Buf, "------");
\r
4052 *Attr = AttrString2Value(Buf+1);
\r
4055 FindField(Str, Buf, 2, NO);
\r
4056 GetMonth(Buf, &sTime.wMonth, &sTime.wDay); /* wDay
\82Í
\8fí
\82É0 */
\r
4057 FindField(Str, Buf, 3, NO);
\r
4058 sTime.wDay = atoi(Buf);
\r
4059 FindField(Str, Buf, 4, NO);
\r
4060 sTime.wYear = atoi(Buf);
\r
4062 /*
\8e\9e\8d\8f */
\r
4063 FindField(Str, Buf, 5, NO);
\r
4064 sTime.wHour = atoi(Buf);
\r
4065 sTime.wMinute = atoi(Buf+3);
\r
4066 sTime.wSecond = 0;
\r
4067 sTime.wMilliseconds = 0;
\r
4068 SystemTimeToFileTime(&sTime, Time);
\r
4069 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
4071 /*
\83T
\83C
\83Y */
\r
4072 FindField(Str, Buf, 1, NO);
\r
4073 *Size = _atoi64(Buf);
\r
4076 if(FindField(Str, Fname, 0, NO) == SUCCESS)
\r
4085 *InfoExist |= (FINFO_TIME | FINFO_DATE | FINFO_SIZE);
\r
4087 /*
\83I
\81[
\83i
\96¼ */
\r
4088 FindField(Str, Buf, 0, NO);
\r
4089 strncpy(Owner, Buf, OWNER_NAME_LEN);
\r
4091 /*
\8e\9e\8d\8f */
\r
4092 FindField(Str, Buf, 3, NO);
\r
4093 sTime.wHour = atoi(Buf);
\r
4094 sTime.wMinute = atoi(Buf+3);
\r
4095 sTime.wSecond = 0;
\r
4096 sTime.wMilliseconds = 0;
\r
4099 FindField(Str, Buf, 2, NO);
\r
4100 sTime.wYear = Assume1900or2000(atoi(Buf));
\r
4101 sTime.wMonth = atoi(Buf + 3);
\r
4102 sTime.wDay = atoi(Buf + 6);
\r
4103 SystemTimeToFileTime(&sTime, Time);
\r
4104 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
4106 /*
\83T
\83C
\83Y */
\r
4107 FindField(Str, Buf, 1, NO);
\r
4108 *Size = _atoi64(Buf);
\r
4111 if(FindField(Str, Fname, 5, YES) == SUCCESS)
\r
4114 if((Pos = strchr(Fname, '/')) != NULL)
\r
4123 *InfoExist |= FINFO_ATTR;
\r
4126 FindField(Str, Buf, 0, NO);
\r
4127 strcat(Buf, "------");
\r
4128 *Attr = AttrString2Value(Buf+1);
\r
4131 Time->dwLowDateTime = 0;
\r
4132 Time->dwHighDateTime = 0;
\r
4133 FindField(Str, Buf, 5, NO);
\r
4136 *InfoExist |= FINFO_DATE;
\r
4138 sTime.wMinute = 0;
\r
4139 sTime.wSecond = 0;
\r
4140 sTime.wMilliseconds = 0;
\r
4142 sTime.wYear = Assume1900or2000(atoi(Buf));
\r
4143 sTime.wMonth = atoi(Buf + 3);
\r
4144 sTime.wDay = atoi(Buf + 6);
\r
4145 SystemTimeToFileTime(&sTime, Time);
\r
4146 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
4150 if(FindField(Str, Fname, 6, YES) == SUCCESS)
\r
4152 RemoveTailingSpaces(Fname);
\r
4154 if((Pos = strchr(Fname, '/')) != NULL)
\r
4162 case LIST_GP6000 :
\r
4163 *InfoExist |= (FINFO_TIME | FINFO_DATE | FINFO_SIZE | FINFO_ATTR);
\r
4165 /*
\83I
\81[
\83i
\96¼ */
\r
4166 FindField(Str, Buf, 3, NO);
\r
4167 strncpy(Owner, Buf, OWNER_NAME_LEN);
\r
4169 /*
\8e\9e\8d\8f */
\r
4170 FindField(Str, Buf, 2, NO);
\r
4171 sTime.wHour = atoi(Buf);
\r
4172 sTime.wMinute = atoi(Buf+3);
\r
4173 sTime.wSecond = 0;
\r
4174 sTime.wMilliseconds = 0;
\r
4177 FindField(Str, Buf, 1, NO);
\r
4178 sTime.wYear = Assume1900or2000(atoi(Buf));
\r
4179 sTime.wMonth = atoi(Buf + 3);
\r
4180 sTime.wDay = atoi(Buf + 6);
\r
4181 SystemTimeToFileTime(&sTime, Time);
\r
4182 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
4184 /*
\83T
\83C
\83Y */
\r
4185 FindField(Str, Buf, 5, NO);
\r
4186 *Size = _atoi64(Buf);
\r
4189 FindField(Str, Buf, 0, NO);
\r
4190 *Attr = AttrString2Value(Buf+1);
\r
4193 if(FindField(Str, Fname, 6, YES) == SUCCESS)
\r
4196 if(strchr("dl", Buf[0]) != NULL)
\r
4202 case LIST_ACOS_4 :
\r
4204 FindField(Str, Fname, 0, NO);
\r
4209 *InfoExist |= (FINFO_TIME | FINFO_DATE | FINFO_SIZE);
\r
4211 /*
\83T
\83C
\83Y */
\r
4212 FindField(Str, Buf, 1, NO);
\r
4213 *Size = _atoi64(Buf) * BLOCK_SIZE;
\r
4215 /*
\8e\9e\8d\8f\81^
\93ú
\95t */
\r
4216 FindField(Str, Buf, 2, NO);
\r
4217 GetVMSdate(Buf, &sTime.wYear, &sTime.wMonth, &sTime.wDay);
\r
4219 FindField(Str, Buf, 3, NO);
\r
4220 GetHourAndMinute(Buf, &sTime.wHour, &sTime.wMinute);
\r
4222 sTime.wSecond = 0;
\r
4223 sTime.wMilliseconds = 0;
\r
4224 SystemTimeToFileTime(&sTime, Time);
\r
4225 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
4228 FindField(Str, Fname, 0, NO);
\r
4231 if((Pos = strchr(Fname, '.')) != NULL)
\r
4233 if(_strnicmp(Pos, ".DIR;", 5) == 0)
\r
4235 /* OpenVMS
\82Ì
\8fê
\8d\87\81A
\83t
\83@
\83C
\83\8b/
\83f
\83B
\83\8c\83N
\83g
\83\8a\8dí
\8f\9c\8e\9e\82É
\82Í".DIR;?"
\82Ü
\82Å
\82È
\82¢
\82Æ
\r
4236 *
\8dí
\8f\9c\82Å
\82«
\82È
\82¢
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\82Í
\82Â
\82Ô
\82³
\82È
\82¢ */
\r
4237 #if !defined(HAVE_OPENVMS)
\r
4246 *InfoExist |= FINFO_SIZE;
\r
4249 /*
\83T
\83C
\83Y */
\r
4250 FindField(Str, Buf, 2, NO);
\r
4251 *Size = _atoi64(Buf);
\r
4252 /*
\82±
\82±
\82Ébreak
\82Í
\82È
\82¢ */
\r
4255 *InfoExist |= (FINFO_TIME | FINFO_DATE | FINFO_ATTR);
\r
4258 FindField(Str, Buf, 1+offs, NO);
\r
4259 sTime.wYear = Assume1900or2000(atoi(Buf));
\r
4260 sTime.wMonth = atoi(Buf + 3);
\r
4261 sTime.wDay = atoi(Buf + 6);
\r
4263 /*
\8e\9e\8d\8f */
\r
4264 FindField(Str, Buf, 2+offs, NO);
\r
4265 sTime.wHour = atoi(Buf);
\r
4266 sTime.wMinute = atoi(Buf+3);
\r
4267 sTime.wSecond = 0;
\r
4268 sTime.wMilliseconds = 0;
\r
4269 SystemTimeToFileTime(&sTime, Time);
\r
4270 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
4273 FindField(Str, Buf, 0, NO);
\r
4274 *Attr = AttrString2Value(Buf+1);
\r
4277 if(FindField(Str, Fname, 3+offs, YES) == SUCCESS)
\r
4279 RemoveTailingSpaces(Fname);
\r
4281 if(strchr("dl", Buf[0]) != NULL)
\r
4286 case LIST_STRATUS :
\r
4287 if(FindField(Str, Buf, 0, NO) != SUCCESS)
\r
4289 if(_strnicmp(Buf, "Files:", 6) == 0)
\r
4291 else if(_strnicmp(Buf, "Dirs:", 5) == 0)
\r
4293 else if(_strnicmp(Buf, "Links:", 6) == 0)
\r
4297 if(StratusMode == 0)
\r
4299 else if(StratusMode == 1)
\r
4304 *InfoExist |= (FINFO_TIME | FINFO_DATE);
\r
4307 if(FindField(Str, Buf, 2+offs, NO) != SUCCESS)
\r
4309 sTime.wYear = Assume1900or2000(atoi(Buf));
\r
4310 sTime.wMonth = atoi(Buf + 3);
\r
4311 sTime.wDay = atoi(Buf + 6);
\r
4313 /*
\8e\9e\8d\8f */
\r
4314 if(FindField(Str, Buf, 3+offs, NO) != SUCCESS)
\r
4316 sTime.wHour = atoi(Buf);
\r
4317 sTime.wMinute = atoi(Buf+3);
\r
4318 sTime.wSecond = 0;
\r
4319 sTime.wMilliseconds = 0;
\r
4320 SystemTimeToFileTime(&sTime, Time);
\r
4321 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
4324 if(FindField(Str, Fname, 4+offs, YES) != SUCCESS)
\r
4327 if(StratusMode == 0)
\r
4329 *InfoExist |= FINFO_SIZE;
\r
4331 /*
\83T
\83C
\83Y */
\r
4332 if(FindField(Str, Buf, 1, NO) != SUCCESS)
\r
4334 *Size = _atoi64(Buf) * 4096;
\r
4336 /*
\8eí
\97Þ
\81i
\83I
\81[
\83i
\96¼
\82Ì
\83t
\83B
\81[
\83\8b\83h
\82É
\82¢
\82ê
\82é
\81j */
\r
4337 if(FindField(Str, Buf, 2, NO) != SUCCESS)
\r
4339 strncpy(Owner, Buf, OWNER_NAME_LEN);
\r
4349 *InfoExist |= (FINFO_DATE | FINFO_SIZE);
\r
4352 for(offs = 11; offs > 7; offs--)
\r
4354 if((err = FindField(Str, Buf, offs, NO)) == SUCCESS)
\r
4357 if(err != SUCCESS)
\r
4359 if(IsDigit(*Buf) == 0)
\r
4361 sTime.wYear = Assume1900or2000(atoi(Buf));
\r
4362 if(FindField(Str, Buf, --offs, NO) != SUCCESS)
\r
4364 GetMonth(Buf, &sTime.wMonth, &sTime.wDay);
\r
4365 if(FindField(Str, Buf, --offs, NO) != SUCCESS)
\r
4367 if(IsDigit(*Buf) == 0)
\r
4369 sTime.wDay = atoi(Buf);
\r
4371 sTime.wMinute = 0;
\r
4372 sTime.wSecond = 0;
\r
4373 sTime.wMilliseconds = 0;
\r
4374 SystemTimeToFileTime(&sTime, Time);
\r
4375 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
4377 /*
\83I
\81[
\83i
\96¼ */
\r
4378 if(FindField(Str, Buf, --offs, NO) != SUCCESS)
\r
4380 strncpy(Owner, Buf, OWNER_NAME_LEN);
\r
4382 /*
\83T
\83C
\83Y */
\r
4385 if((err = FindField(Str, Buf, --offs, NO)) != SUCCESS)
\r
4388 while(IsDigit(*Buf) == 0);
\r
4390 if((err = FindField(Str, Buf, --offs, NO)) != SUCCESS)
\r
4393 *Size = _atoi64(Buf);
\r
4394 if((err = FindField(Str, Buf, --offs, NO)) != SUCCESS)
\r
4396 if(IsDigit(*Buf) == 0)
\r
4399 if(FindField(Str, Fname, 0, NO) != SUCCESS)
\r
4406 if((FindField(Str, Buf, 1, NO) == SUCCESS) &&
\r
4407 (strcmp(Buf, "DR") == 0))
\r
4414 case LIST_ALLIED :
\r
4415 *InfoExist |= (FINFO_TIME | FINFO_DATE | FINFO_SIZE);
\r
4418 FindField(Str, Buf, 3, NO);
\r
4419 GetMonth(Buf, &sTime.wMonth, &sTime.wDay); /* wDay
\82Í
\8fí
\82É0 */
\r
4420 FindField(Str, Buf, 4, NO);
\r
4421 sTime.wDay = atoi(Buf);
\r
4422 FindField(Str, Buf, 6, NO);
\r
4423 sTime.wYear = atoi(Buf);
\r
4425 /*
\8e\9e\8d\8f */
\r
4426 FindField(Str, Buf, 5, NO);
\r
4427 sTime.wHour = atoi(Buf);
\r
4428 sTime.wMinute = atoi(Buf+3);
\r
4429 sTime.wSecond = 0;
\r
4430 sTime.wMilliseconds = 0;
\r
4431 SystemTimeToFileTime(&sTime, Time);
\r
4432 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
4434 /*
\83T
\83C
\83Y */
\r
4435 FindField(Str, Buf, 0, NO);
\r
4436 *Size = _atoi64(Buf);
\r
4439 if(FindField(Str, Fname, 1, NO) == SUCCESS)
\r
4448 *InfoExist |= (FINFO_TIME | FINFO_DATE | FINFO_SIZE);
\r
4451 FindField(Str, Buf, 1, NO);
\r
4452 sTime.wYear = Assume1900or2000(atoi(Buf));
\r
4453 sTime.wMonth = atoi(Buf + 3);
\r
4454 sTime.wDay = atoi(Buf + 6);
\r
4455 SystemTimeToFileTime(&sTime, Time);
\r
4456 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
4458 /*
\8e\9e\8d\8f */
\r
4459 FindField(Str, Buf, 2, NO);
\r
4460 sTime.wHour = atoi_n(Buf, 2);
\r
4461 sTime.wMinute = atoi(Buf+2);
\r
4462 sTime.wSecond = 0;
\r
4463 sTime.wMilliseconds = 0;
\r
4464 SystemTimeToFileTime(&sTime, Time);
\r
4465 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
4467 /*
\83T
\83C
\83Y */
\r
4468 FindField(Str, Buf, 5, NO);
\r
4469 *Size = _atoi64(Buf);
\r
4471 /*
\83I
\81[
\83i
\96¼ */
\r
4472 FindField(Str, Buf, 0, NO);
\r
4473 strncpy(Owner, Buf, OWNER_NAME_LEN);
\r
4475 /*
\83I
\81[
\83i
\96¼ */
\r
4476 FindField(Str, Buf, 3, NO);
\r
4479 if(FindField(Str, Fname, 6, NO) == SUCCESS)
\r
4481 if((Buf[0] == 'd') || (Buf[0] == 'D'))
\r
4489 *InfoExist |= FINFO_DATE;
\r
4493 FindField(Str, Buf, 2, NO);
\r
4494 sTime.wYear = atoi(Buf);
\r
4495 sTime.wMonth = atoi(Buf + 5);
\r
4496 sTime.wDay = atoi(Buf + 8);
\r
4498 sTime.wMinute = 0;
\r
4499 sTime.wSecond = 0;
\r
4500 sTime.wMilliseconds = 0;
\r
4501 SystemTimeToFileTime(&sTime, Time);
\r
4502 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
4505 FindField(Str, Buf, 8, NO);
\r
4506 if(FindField(Str, Fname, 9, NO) == SUCCESS)
\r
4508 if(strcmp(Buf, "PO") == 0)
\r
4510 else if(strcmp(Buf, "PS") == 0)
\r
4515 case LIST_AGILENT :
\r
4516 *InfoExist |= (FINFO_SIZE | FINFO_ATTR);
\r
4518 /*
\83I
\81[
\83i
\96¼ */
\r
4519 FindField(Str, Buf, 2, NO);
\r
4520 strncpy(Owner, Buf, OWNER_NAME_LEN);
\r
4522 /*
\83T
\83C
\83Y */
\r
4523 FindField(Str, Buf, 4, NO);
\r
4524 *Size = _atoi64(Buf);
\r
4527 FindField(Str, Buf, 0, NO);
\r
4528 *Attr = AttrString2Value(Buf+1);
\r
4531 if(FindField(Str, Fname, 5, YES) == SUCCESS)
\r
4534 if(strchr("dl", Buf[0]) != NULL)
\r
4539 case LIST_SHIBASOKU :
\r
4540 *InfoExist |= (FINFO_TIME | FINFO_DATE | FINFO_SIZE);
\r
4542 /*
\83T
\83C
\83Y */
\r
4543 FindField(Str, Buf, 0, NO);
\r
4544 if(IsDigit(Buf[0]))
\r
4546 *Size = _atoi64(Buf);
\r
4549 FindField(Str, Buf, 1, NO);
\r
4551 GetMonth(Buf, &sTime.wMonth, &sTime.wDay);
\r
4552 sTime.wDay = atoi(Buf+4);
\r
4553 sTime.wYear = atoi(Buf+7);
\r
4555 /*
\8e\9e\8d\8f */
\r
4556 FindField(Str, Buf, 2, NO);
\r
4557 sTime.wHour = atoi(Buf);
\r
4558 sTime.wMinute = atoi(Buf+3);
\r
4559 sTime.wSecond = 0;
\r
4560 sTime.wMilliseconds = 0;
\r
4561 SystemTimeToFileTime(&sTime, Time);
\r
4562 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
4565 FindField(Str, Fname, 3, NO);
\r
4569 if(FindField(Str, Buf, 4, NO) == SUCCESS)
\r
4571 if(strcmp(Buf, "<DIR>") == 0)
\r
4577 case LIST_UNIX_10 :
\r
4578 case LIST_UNIX_11 :
\r
4579 case LIST_UNIX_12 :
\r
4580 case LIST_UNIX_13 :
\r
4581 case LIST_UNIX_14 :
\r
4582 case LIST_UNIX_15 :
\r
4583 case LIST_UNIX_20 :
\r
4584 case LIST_UNIX_21 :
\r
4585 case LIST_UNIX_22 :
\r
4586 case LIST_UNIX_23 :
\r
4587 case LIST_UNIX_24 :
\r
4588 case LIST_UNIX_25 :
\r
4589 case LIST_UNIX_50 :
\r
4590 case LIST_UNIX_51 :
\r
4591 case LIST_UNIX_54 :
\r
4592 case LIST_UNIX_60 :
\r
4593 case LIST_UNIX_61 :
\r
4594 case LIST_UNIX_62 :
\r
4595 case LIST_UNIX_63 :
\r
4596 case LIST_UNIX_64 :
\r
4597 case LIST_UNIX_65 :
\r
4598 case LIST_UNIX_70 :
\r
4599 case LIST_UNIX_71 :
\r
4600 case LIST_UNIX_72 :
\r
4601 case LIST_UNIX_73 :
\r
4602 case LIST_UNIX_74 :
\r
4603 case LIST_UNIX_75 :
\r
4604 // MELCOM
\82Í
\83r
\83b
\83g
\83t
\83\89\83O
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\r
4605 // case LIST_MELCOM :
\r
4607 /* offs
\82Í
\83T
\83C
\83Y
\82Ì
\88Ê
\92u, offs=0
\82Í
\83J
\83\89\83\804 */
\r
4609 if((ListType == LIST_UNIX_12) ||
\r
4610 (ListType == LIST_UNIX_13) ||
\r
4611 (ListType == LIST_UNIX_15) ||
\r
4612 (ListType == LIST_UNIX_20) ||
\r
4613 (ListType == LIST_UNIX_21) ||
\r
4614 (ListType == LIST_UNIX_24))
\r
4617 if((ListType == LIST_UNIX_22) ||
\r
4618 (ListType == LIST_UNIX_23) ||
\r
4619 (ListType == LIST_UNIX_25) ||
\r
4620 (ListType == LIST_UNIX_50) ||
\r
4621 (ListType == LIST_UNIX_51) ||
\r
4622 (ListType == LIST_UNIX_54))
\r
4625 if((ListType == LIST_UNIX_60) ||
\r
4626 (ListType == LIST_UNIX_61) ||
\r
4627 (ListType == LIST_UNIX_64))
\r
4630 if((ListType == LIST_UNIX_62) ||
\r
4631 (ListType == LIST_UNIX_63) ||
\r
4632 (ListType == LIST_UNIX_65) ||
\r
4633 (ListType == LIST_UNIX_70) ||
\r
4634 (ListType == LIST_UNIX_71) ||
\r
4635 (ListType == LIST_UNIX_74))
\r
4638 /* offs2
\82Í
\8e\9e\8aÔ(
\82à
\82µ
\82
\82Í
\94N)
\82Ì
\88Ê
\92u */
\r
4640 if((ListType == LIST_UNIX_11) ||
\r
4641 (ListType == LIST_UNIX_13) ||
\r
4642 (ListType == LIST_UNIX_21) ||
\r
4643 (ListType == LIST_UNIX_23) ||
\r
4644 (ListType == LIST_UNIX_51) ||
\r
4645 (ListType == LIST_UNIX_61) ||
\r
4646 (ListType == LIST_UNIX_63) ||
\r
4647 (ListType == LIST_UNIX_71) ||
\r
4648 (ListType == LIST_UNIX_73))
\r
4651 /* offs3
\82Í
\83I
\81[
\83i
\96¼
\82Ì
\88Ê
\92u */
\r
4653 if((ListType == LIST_UNIX_12) ||
\r
4654 (ListType == LIST_UNIX_13) ||
\r
4655 (ListType == LIST_UNIX_15) ||
\r
4656 (ListType == LIST_UNIX_22) ||
\r
4657 (ListType == LIST_UNIX_23) ||
\r
4658 (ListType == LIST_UNIX_25) ||
\r
4659 (ListType == LIST_UNIX_50) ||
\r
4660 (ListType == LIST_UNIX_51) ||
\r
4661 (ListType == LIST_UNIX_62) ||
\r
4662 (ListType == LIST_UNIX_63) ||
\r
4663 (ListType == LIST_UNIX_65) ||
\r
4664 (ListType == LIST_UNIX_72) ||
\r
4665 (ListType == LIST_UNIX_73) ||
\r
4666 (ListType == LIST_UNIX_75))
\r
4670 if((ListType == LIST_UNIX_14) ||
\r
4671 (ListType == LIST_UNIX_15) ||
\r
4672 (ListType == LIST_UNIX_24) ||
\r
4673 (ListType == LIST_UNIX_25) ||
\r
4674 (ListType == LIST_UNIX_54) ||
\r
4675 (ListType == LIST_UNIX_64) ||
\r
4676 (ListType == LIST_UNIX_65) ||
\r
4677 (ListType == LIST_UNIX_74) ||
\r
4678 (ListType == LIST_UNIX_75))
\r
4681 *InfoExist |= (FINFO_DATE | FINFO_SIZE | FINFO_ATTR);
\r
4684 FindField(Str, Buf, 0, NO);
\r
4685 *Attr = AttrString2Value(Buf+1);
\r
4687 /*
\83I
\81[
\83i
\96¼ */
\r
4688 FindField(Str, Buf, 2+offs3, NO);
\r
4689 strncpy(Owner, Buf, OWNER_NAME_LEN);
\r
4691 /*
\83T
\83C
\83Y */
\r
4692 FindField(Str, Buf, 4+offs, NO);
\r
4694 if((*Pos != NUL) && (IsDigit(*Pos) == 0))
\r
4696 Pos = strchr(Pos, NUL) - 1;
\r
4697 for(; Pos > Buf; Pos--)
\r
4699 if(IsDigit(*Pos) == 0)
\r
4706 *Size = _atoi64(Pos);
\r
4710 /*
\8e\9e\8d\8f\81^
\93ú
\95t */
\r
4711 GetLocalTime(&sTime);
\r
4712 memcpy(&sTimeNow, &sTime, sizeof(SYSTEMTIME));
\r
4713 sTime.wSecond = 0;
\r
4714 sTime.wMilliseconds = 0;
\r
4716 FindField(Str, Buf, 5+offs, NO);
\r
4717 /*
\93ú
\95t
\82ª yy/mm/dd
\82Ì
\8fê
\8d\87\82É
\91Î
\89\9e */
\r
4718 if(GetYearMonthDay(Buf, &sTime.wYear, &sTime.wMonth, &sTime.wDay) == SUCCESS)
\r
4720 sTime.wYear = Assume1900or2000(sTime.wYear);
\r
4722 FindField(Str, Buf, 7+offs+offs2, NO);
\r
4723 if(GetHourAndMinute(Buf, &sTime.wHour, &sTime.wMinute) == SUCCESS)
\r
4724 *InfoExist |= FINFO_TIME;
\r
4728 GetMonth(Buf, &sTime.wMonth, &sTime.wDay);
\r
4731 FindField(Str, Buf, 6+offs, NO);
\r
4732 sTime.wDay = atoi(Buf);
\r
4735 FindField(Str, Buf, 7+offs+offs2, NO);
\r
4736 if(GetHourAndMinute(Buf, &sTime.wHour, &sTime.wMinute) == FAIL)
\r
4738 sTime.wYear = atoi(Buf);
\r
4742 *InfoExist |= FINFO_TIME;
\r
4744 /*
\94N
\82ª
\82È
\82¢ */
\r
4745 /*
\8c»
\8dÝ
\82Ì
\93ú
\95t
\82©
\82ç
\90\84\92è */
\r
4746 if((sTimeNow.wMonth == 12) && (sTime.wMonth == 1))
\r
4748 else if(sTimeNow.wMonth+1 == sTime.wMonth)
\r
4750 else if(sTimeNow.wMonth < sTime.wMonth)
\r
4754 //#################
\r
4755 /*
\8d¡
\94N
\82Ì
\8d¡
\93ú
\88È
\8d~
\82Ì
\83t
\83@
\83C
\83\8b\82Í
\81A
\8eÀ
\82Í
\8b\8e\94N
\82Ì
\83t
\83@
\83C
\83\8b */
\r
4756 if((sTime.wYear == sTimeNow.wYear) &&
\r
4757 ((sTime.wMonth > sTimeNow.wMonth) ||
\r
4758 ((sTime.wMonth == sTimeNow.wMonth) && (sTime.wDay > sTimeNow.wDay))))
\r
4767 /* LIST_UNIX_?4, LIST_UNIX_?5
\82Ì
\8e\9e */
\r
4768 FindField(Str, Buf, 5+offs, NO);
\r
4769 sTime.wYear = atoi(Buf);
\r
4770 FindField(Str, Buf, 6+offs, NO);
\r
4771 sTime.wMonth = atoi(Buf);
\r
4772 FindField(Str, Buf, 7+offs, NO);
\r
4773 sTime.wDay = atoi(Buf);
\r
4775 sTime.wMinute = 0;
\r
4776 sTime.wSecond = 0;
\r
4777 sTime.wMilliseconds = 0;
\r
4779 SystemTimeToFileTime(&sTime, Time);
\r
4780 SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
\r
4783 if(FindField(Str, Fname, 8+offs+offs2, YES) == SUCCESS)
\r
4786 if(OrgListType & LIST_MELCOM)
\r
4790 RemoveTailingSpaces(Fname);
\r
4794 if((Pos = strstr(Fname, " -> ")) != NULL)
\r
4798 if(strchr("dl", *Str) != NULL)
\r
4800 if((_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "/") == 0) ||
\r
4801 (_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "\\") == 0))
\r
4803 *(Fname + strlen(Fname) - 1) = NUL;
\r
4809 else if(strchr("-+f", *Str) != NULL)
\r
4812 if((Ret == NODE_FILE) && (Flag != 'B'))
\r
4818 if((Ret != NODE_NONE) && (strlen(Fname) > 0))
\r
4820 if(CheckSpecialDirName(Fname) == YES)
\r
4823 ChangeFnameRemote2Local(Fname, FMAX_PATH);
\r
4829 /*-----
\8ew
\92è
\82Ì
\94Ô
\8d\86\82Ì
\83t
\83B
\81[
\83\8b\83h
\82ð
\8b\81\82ß
\82é ----------------------------------------
\r
4832 * char *Str :
\95¶
\8e\9a\97ñ
\r
4833 * char *Buf :
\95¶
\8e\9a\97ñ
\82Ì
\83R
\83s
\81[
\90æ
\r
4834 * int Num :
\83t
\83B
\81[
\83\8b\83h
\94Ô
\8d\86\r
4835 * int ToLast :
\95¶
\8e\9a\97ñ
\82Ì
\8dÅ
\8cã
\82Ü
\82Å
\83R
\83s
\81[ (YES/NO)
\r
4838 * int
\83X
\83e
\81[
\83^
\83X
\r
4840 *----------------------------------------------------------------------------*/
\r
4842 static int FindField(char *Str, char *Buf, int Num, int ToLast)
\r
4851 while(*Str == ' ')
\r
4854 for(; Num > 0; Num--)
\r
4856 if((Str = strchr(Str, ' ')) != NULL)
\r
4858 while(*Str == ' ')
\r
4875 if((ToLast == YES) || ((Pos = strchr(Str, ' ')) == NULL))
\r
4879 strncpy(Buf, Str, Pos - Str);
\r
4880 *(Buf + (Pos - Str)) = NUL;
\r
4888 /*-----
\95¶
\8e\9a\97ñ
\82©
\82ç
\8c\8e\82ð
\8b\81\82ß
\82é --------------------------------------------------
\r
4891 * char *Str :
\95¶
\8e\9a\97ñ
\r
4892 * WORD *Month :
\8c\8e (0=
\8c\8e\82ð
\95\
\82·
\95¶
\8e\9a\97ñ
\82Å
\82Í
\82È
\82¢)
\r
4893 * WORD *Day :
\93ú (0=
\93ú
\82Í
\8aÜ
\82Ü
\82ê
\82Ä
\82¢
\82È
\82¢)
\r
4897 *----------------------------------------------------------------------------*/
\r
4899 static void GetMonth(char *Str, WORD *Month, WORD *Day)
\r
4901 static const char DateStr[] = { "JanFebMarAprMayJunJulAugSepOctNovDec" };
\r
4907 if(IsDigit(*Str) == 0)
\r
4910 *Str = toupper(*Str);
\r
4911 if((Pos = strstr(DateStr, Str)) != NULL)
\r
4912 *Month = ((Pos - DateStr) / 3) + 1;
\r
4916 /*
\81u10
\8c\8e\81v
\82Ì
\82æ
\82¤
\82È
\93ú
\95t
\82ð
\95Ô
\82·
\82à
\82Ì
\82ª
\82 \82é */
\r
4917 /*
\8a¿
\8e\9a\82ªJIS
\82Ì
\8e\9e\82Ì
\82ÝSJIS
\82É
\95Ï
\8a· */
\r
4918 ConvAutoToSJIS(Str, KANJI_NOCNV);
\r
4921 while(*Pos != NUL)
\r
4923 if(!IsDigit(*Pos))
\r
4925 if((_mbsncmp(Pos, "
\8c\8e", 1) == 0) ||
\r
4926 (memcmp(Pos, "\xB7\xEE", 2) == 0) || /* EUC
\82Ì
\81u
\8c\8e\81v */
\r
4927 (memcmp(Pos, "\xD4\xC2", 2) == 0)) /* GB
\83R
\81[
\83h
\82Ì
\81u
\8c\8e\81v */
\r
4930 *Month = atoi(Str);
\r
4931 if((*Month < 1) || (*Month > 12))
\r
4935 /*
\81u10
\8c\8e11
\93ú
\81v
\82Ì
\82æ
\82¤
\82É
\93ú
\82ª
\82
\82Á
\82Â
\82¢
\82Ä
\82¢
\82é
\8e\96\82ª
\82 \82é */
\r
4939 if((*Day < 1) || (*Day > 31))
\r
4944 else if(_mbsncmp(Pos, "/", 1) == 0)
\r
4946 /*
\81u10/
\81v
\82Ì
\82æ
\82¤
\82È
\93ú
\95t
\82ð
\95Ô
\82·
\82à
\82Ì
\82ª
\82 \82é */
\r
4948 *Month = atoi(Str);
\r
4949 if((*Month < 1) || (*Month > 12))
\r
4953 /*
\81u10/11
\81v
\82Ì
\82æ
\82¤
\82É
\93ú
\82ª
\82
\82Á
\82Â
\82¢
\82Ä
\82¢
\82é
\8e\96\82ª
\82 \82é */
\r
4957 if((*Day < 1) || (*Day > 31))
\r
4971 /*-----
\95¶
\8e\9a\97ñ
\82©
\82ç
\94N
\8c\8e\93ú
\82ð
\8b\81\82ß
\82é ----------------------------------------------
\r
4974 * char *Str :
\95¶
\8e\9a\97ñ
\r
4975 * WORD *Year :
\94N
\r
4976 * WORD *Month :
\8c\8e\r
4977 * WORD *Day :
\93ú
\r
4980 * int
\83X
\83e
\81[
\83^
\83X (SUCCESS/FAIL=
\93ú
\95t
\82ð
\95\
\82·
\95¶
\8e\9a\82Å
\82Í
\82È
\82¢)
\r
4983 *
\88È
\89º
\82Ì
\8c`
\8e®
\82ð
\83T
\83|
\81[
\83g
\r
4985 * FAIL
\82ð
\95Ô
\82·
\8e\9e\82Í *Year = 0; *Month = 0; *Day = 0
\r
4986 *----------------------------------------------------------------------------*/
\r
4987 static int GetYearMonthDay(char *Str, WORD *Year, WORD *Month, WORD *Day)
\r
4992 if(strlen(Str) == 8)
\r
4994 if(IsDigit(Str[0]) && IsDigit(Str[1]) && !IsDigit(Str[2]) &&
\r
4995 IsDigit(Str[3]) && IsDigit(Str[4]) && !IsDigit(Str[5]) &&
\r
4996 IsDigit(Str[6]) && IsDigit(Str[7]))
\r
4998 *Year = atoi(&Str[0]);
\r
4999 *Month = atoi(&Str[3]);
\r
5000 *Day = atoi(&Str[6]);
\r
5008 /*-----
\95¶
\8e\9a\97ñ
\82©
\82ç
\8e\9e\8d\8f\82ð
\8eæ
\82è
\8fo
\82· ----------------------------------------------
\r
5011 * char *Str :
\95¶
\8e\9a\97ñ
\r
5012 * WORD *Hour :
\8e\9e\r
5013 * WORD *Minute :
\95ª
\r
5016 * int
\83X
\83e
\81[
\83^
\83X (SUCCESS/FAIL=
\8e\9e\8d\8f\82ð
\95\
\82·
\95¶
\8e\9a\82Å
\82Í
\82È
\82¢)
\r
5019 *
\88È
\89º
\82Ì
\8c`
\8e®
\82ð
\83T
\83|
\81[
\83g
\r
5022 * FAIL
\82ð
\95Ô
\82·
\8e\9e\82Í *Hour = 0; *Minute = 0
\r
5023 *----------------------------------------------------------------------------*/
\r
5025 static int GetHourAndMinute(char *Str, WORD *Hour, WORD *Minute)
\r
5031 if((_mbslen(Str) >= 3) && (isdigit(Str[0]) != 0))
\r
5033 *Hour = atoi(Str);
\r
5036 if((Pos = _mbschr(Str, ':')) != NULL)
\r
5039 if(IsDigit(*Pos) != 0)
\r
5041 *Minute = atoi(Pos);
\r
5048 /*
\8a¿
\8e\9a\82ªJIS
\82Ì
\8e\9e\82Ì
\82ÝSJIS
\82É
\95Ï
\8a· */
\r
5049 ConvAutoToSJIS(Str, KANJI_NOCNV);
\r
5052 while(*Pos != NUL)
\r
5054 if(IsDigit(*Pos) == 0)
\r
5056 if((_mbsncmp(Pos, "
\8e\9e", 1) == 0) ||
\r
5057 (memcmp(Pos, "\xBB\xFE", 2) == 0)) /* EUC
\82Ì
\81u
\8e\9e\81v */
\r
5062 *Minute = atoi(Pos);
\r
5074 else if((_stricmp(Str, "a:m") == 0) || (_stricmp(Str, "p:m") == 0))
\r
5090 /*----- VAX VMS
\82Ì
\93ú
\95t
\95¶
\8e\9a\97ñ
\82©
\82ç
\93ú
\95t
\82ð
\8eæ
\82è
\8fo
\82· ---------------------------------
\r
5093 * char *Str :
\95¶
\8e\9a\97ñ
\r
5094 * WORD *Year :
\94N
\r
5095 * WORD *Month :
\8c\8e\r
5096 * WORD *Day :
\93ú
\r
5099 * int
\83X
\83e
\81[
\83^
\83X (SUCCESS/FAIL=
\93ú
\95t
\82ð
\95\
\82·
\95¶
\8e\9a\82Å
\82Í
\82È
\82¢)
\r
5102 *
\88È
\89º
\82Ì
\8c`
\8e®
\82ð
\83T
\83|
\81[
\83g
\r
5104 * FAIL
\82ð
\95Ô
\82·
\8e\9e\82Í *Year = 0; *Month = 0; *Day = 0
\r
5105 *----------------------------------------------------------------------------*/
\r
5107 static int GetVMSdate(char *Str, WORD *Year, WORD *Month, WORD *Day)
\r
5116 if((Pos = strchr(Str, '-')) != NULL)
\r
5119 strncpy(Buf, Pos, 3);
\r
5121 GetMonth(Buf, Month, &Tmp);
\r
5122 if((Pos = strchr(Pos, '-')) != NULL)
\r
5125 *Year = atoi(Pos);
\r
5140 /*----- 1900
\94N
\91ã
\82©2000
\94N
\91ã
\82©
\82ð
\8c\88\82ß
\82é ------------------------------------------
\r
5143 * int Year :
\94N
\81i
\82Q
\8c\85\81j
\r
5147 *----------------------------------------------------------------------------*/
\r
5149 int Assume1900or2000(int Year)
\r
5160 /*----- "."
\82â".."
\82©
\82Ç
\82¤
\82©
\82ð
\95Ô
\82· -----------------------------------------------
\r
5163 * char *Fname :
\83t
\83@
\83C
\83\8b\96¼
\r
5166 * int
\83X
\83e
\81[
\83^
\83X (YES="."
\82©".."
\82Ì
\82Ç
\82¿
\82ç
\82©/NO)
\r
5167 *----------------------------------------------------------------------------*/
\r
5169 static int CheckSpecialDirName(char *Fname)
\r
5174 if((strcmp(Fname, ".") == 0) || (strcmp(Fname, "..") == 0))
\r
5181 /*-----
\83t
\83B
\83\8b\83^
\82É
\8ew
\92è
\82³
\82ê
\82½
\83t
\83@
\83C
\83\8b\96¼
\82©
\82Ç
\82¤
\82©
\82ð
\95Ô
\82· --------------------------
\r
5184 * char Fname :
\83t
\83@
\83C
\83\8b\96¼
\r
5185 * int Type :
\83t
\83@
\83C
\83\8b\82Ì
\83^
\83C
\83v (NODE_xxx)
\r
5188 * int
\83X
\83e
\81[
\83^
\83X
\r
5189 * YES/NO=
\95\
\8e¦
\82µ
\82È
\82¢
\r
5192 *
\83t
\83B
\83\8b\83^
\95¶
\8e\9a\97ñ
\82Í
\88È
\89º
\82Ì
\8c`
\8e®
\r
5194 *----------------------------------------------------------------------------*/
\r
5196 static int AskFilterStr(char *Fname, int Type)
\r
5201 char Tmp[FILTER_EXT_LEN+1];
\r
5205 if((strlen(Tbl) > 0) && (Type == NODE_FILE))
\r
5208 while((Tbl != NULL) && (*Tbl != NUL))
\r
5210 while(*Tbl == ';')
\r
5216 if((Pos = strchr(Tmp, ';')) != NULL)
\r
5219 if(CheckFname(Fname, Tmp) == SUCCESS)
\r
5225 Tbl = strchr(Tbl, ';');
\r
5232 /*-----
\83t
\83B
\83\8b\83^
\82ð
\90Ý
\92è
\82·
\82é ----------------------------------------------------
\r
5239 *----------------------------------------------------------------------------*/
\r
5241 void SetFilter(int *CancelCheckWork)
\r
5243 if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(filter_dlg), GetMainHwnd(), FilterWndProc) == YES)
\r
5245 DispWindowTitle();
\r
5246 GetLocalDirForWnd();
\r
5247 GetRemoteDirForWnd(CACHE_LASTREAD, CancelCheckWork);
\r
5253 /*-----
\83t
\83B
\83\8b\83^
\93ü
\97Í
\83_
\83C
\83A
\83\8d\83O
\82Ì
\83R
\81[
\83\8b\83o
\83b
\83N ----------------------------------
\r
5256 * HWND hDlg :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
5257 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
5258 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
5259 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
5263 *----------------------------------------------------------------------------*/
\r
5265 static BOOL CALLBACK FilterWndProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
5269 case WM_INITDIALOG :
\r
5270 SendDlgItemMessage(hDlg, FILTER_STR, EM_LIMITTEXT, FILTER_EXT_LEN+1, 0);
\r
5271 SendDlgItemMessage(hDlg, FILTER_STR, WM_SETTEXT, 0, (LPARAM)FilterStr);
\r
5275 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
5278 SendDlgItemMessage(hDlg, FILTER_STR, WM_GETTEXT, FILTER_EXT_LEN, (LPARAM)FilterStr);
\r
5279 EndDialog(hDlg, YES);
\r
5283 EndDialog(hDlg, NO);
\r
5287 strcpy(FilterStr, "*");
\r
5288 EndDialog(hDlg, YES);
\r
5292 hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000021);
\r
5304 static int atoi_n(const char *Str, int Len)
\r
5310 if((Tmp = malloc(Len+1)) != NULL)
\r
5312 memset(Tmp, 0, Len+1);
\r
5313 strncpy(Tmp, Str, Len);
\r