static INT_PTR CALLBACK SelectDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
static int GetImageIndex(int Win, int Pos);\r
static void DispListList(FILELIST *Pos, char *Title);\r
-static void MakeRemoteTree1(char *Path, char *Cur, FILELIST **Base, int *CancelCheckWork);\r
-static void MakeRemoteTree2(char *Path, char *Cur, FILELIST **Base, int *CancelCheckWork);\r
+// ファイル一覧バグ修正\r
+//static void MakeRemoteTree1(char *Path, char *Cur, FILELIST **Base, int *CancelCheckWork);\r
+//static void MakeRemoteTree2(char *Path, char *Cur, FILELIST **Base, int *CancelCheckWork);\r
+static int MakeRemoteTree1(char *Path, char *Cur, FILELIST **Base, int *CancelCheckWork);\r
+static int MakeRemoteTree2(char *Path, char *Cur, FILELIST **Base, int *CancelCheckWork);\r
static void CopyTmpListToFileList(FILELIST **Base, FILELIST *List);\r
static int GetListOneLine(char *Buf, int Max, FILE *Fd);\r
static int MakeDirPath(char *Str, int ListType, char *Path, char *Dir);\r
-static void MakeLocalTree(char *Path, FILELIST **Base);\r
+// ファイル一覧バグ修正\r
+//static void MakeLocalTree(char *Path, FILELIST **Base);\r
+static int MakeLocalTree(char *Path, FILELIST **Base);\r
static void AddFileList(FILELIST *Pkt, FILELIST **Base);\r
static int AnalyzeFileInfo(char *Str);\r
static int CheckUnixType(char *Str, char *Tmp, int Add1, int Add2, int Day);\r
\r
/*===== ローカル側のリストビュー =====*/\r
\r
+ // 高DPI対応\r
+// hWndListLocal = CreateWindowEx(/*WS_EX_STATICEDGE*/WS_EX_CLIENTEDGE,\r
+// WC_LISTVIEWA, NULL,\r
+// WS_CHILD | /*WS_BORDER | */LVS_REPORT | LVS_SHOWSELALWAYS,\r
+// 0, TOOLWIN_HEIGHT*2, LocalWidth, ListHeight,\r
+// GetMainHwnd(), (HMENU)1500, hInst, NULL);\r
hWndListLocal = CreateWindowEx(/*WS_EX_STATICEDGE*/WS_EX_CLIENTEDGE,\r
WC_LISTVIEWA, NULL,\r
WS_CHILD | /*WS_BORDER | */LVS_REPORT | LVS_SHOWSELALWAYS,\r
- 0, TOOLWIN_HEIGHT*2, LocalWidth, ListHeight,\r
+ 0, AskToolWinHeight()*2, LocalWidth, ListHeight,\r
GetMainHwnd(), (HMENU)1500, hInst, NULL);\r
\r
if(hWndListLocal != NULL)\r
\r
/*===== ホスト側のリストビュー =====*/\r
\r
+ // 高DPI対応\r
+// hWndListRemote = CreateWindowEx(/*WS_EX_STATICEDGE*/WS_EX_CLIENTEDGE,\r
+// WC_LISTVIEWA, NULL,\r
+// WS_CHILD | /*WS_BORDER | */LVS_REPORT | LVS_SHOWSELALWAYS,\r
+// LocalWidth + SepaWidth, TOOLWIN_HEIGHT*2, RemoteWidth, ListHeight,\r
+// GetMainHwnd(), (HMENU)1500, hInst, NULL);\r
hWndListRemote = CreateWindowEx(/*WS_EX_STATICEDGE*/WS_EX_CLIENTEDGE,\r
WC_LISTVIEWA, NULL,\r
WS_CHILD | /*WS_BORDER | */LVS_REPORT | LVS_SHOWSELALWAYS,\r
- LocalWidth + SepaWidth, TOOLWIN_HEIGHT*2, RemoteWidth, ListHeight,\r
+ LocalWidth + SepaWidth, AskToolWinHeight()*2, RemoteWidth, ListHeight,\r
GetMainHwnd(), (HMENU)1500, hInst, NULL);\r
\r
if(hWndListRemote != NULL)\r
* なし\r
*----------------------------------------------------------------------------*/\r
\r
-void MakeSelectedFileList(int Win, int Expand, int All, FILELIST **Base, int *CancelCheckWork)\r
+// ファイル一覧バグ修正\r
+//void MakeSelectedFileList(int Win, int Expand, int All, FILELIST **Base, int *CancelCheckWork)\r
+int MakeSelectedFileList(int Win, int Expand, int All, FILELIST **Base, int *CancelCheckWork)\r
{\r
+ // ファイル一覧バグ修正\r
+ int Sts;\r
int Pos;\r
char Name[FMAX_PATH+1];\r
char Cur[FMAX_PATH+1];\r
DWORD Attr;\r
int Ignore;\r
\r
+ // ファイル一覧バグ修正\r
+ Sts = FFFTP_SUCCESS;\r
if((All == YES) || (GetSelectedCount(Win) > 0))\r
{\r
/*===== カレントディレクトリのファイル =====*/\r
// }\r
if(GetImageIndex(Win, Pos) != 4) { // symlink\r
if(Win == WIN_LOCAL)\r
- MakeLocalTree(Name, Base);\r
+ // ファイル一覧バグ修正\r
+// MakeLocalTree(Name, Base);\r
+ {\r
+ if(MakeLocalTree(Name, Base) == FFFTP_FAIL)\r
+ Sts = FFFTP_FAIL;\r
+ }\r
else\r
{\r
AskRemoteCurDir(Cur, FMAX_PATH);\r
\r
if((AskListCmdMode() == NO) &&\r
(AskUseNLST_R() == YES))\r
- MakeRemoteTree1(Name, Cur, Base, CancelCheckWork);\r
+ // ファイル一覧バグ修正\r
+// MakeRemoteTree1(Name, Cur, Base, CancelCheckWork);\r
+ {\r
+ if(MakeRemoteTree1(Name, Cur, Base, CancelCheckWork) == FFFTP_FAIL)\r
+ Sts = FFFTP_FAIL;\r
+ }\r
else\r
- MakeRemoteTree2(Name, Cur, Base, CancelCheckWork);\r
+ // ファイル一覧バグ修正\r
+// MakeRemoteTree2(Name, Cur, Base, CancelCheckWork);\r
+ {\r
+ if(MakeRemoteTree2(Name, Cur, Base, CancelCheckWork) == FFFTP_FAIL)\r
+ Sts = FFFTP_FAIL;\r
+ }\r
\r
//DispListList(*Base, "LIST");\r
\r
}\r
}\r
}\r
- return;\r
+ // ファイル一覧バグ修正\r
+// return;\r
+ return(Sts);\r
}\r
\r
\r
* NLST -alLR を使う\r
*----------------------------------------------------------------------------*/\r
\r
-static void MakeRemoteTree1(char *Path, char *Cur, FILELIST **Base, int *CancelCheckWork)\r
+// ファイル一覧バグ修正\r
+//static void MakeRemoteTree1(char *Path, char *Cur, FILELIST **Base, int *CancelCheckWork)\r
+static int MakeRemoteTree1(char *Path, char *Cur, FILELIST **Base, int *CancelCheckWork)\r
{\r
+ // ファイル一覧バグ修正\r
+ int Ret;\r
int Sts;\r
\r
+ // ファイル一覧バグ修正\r
+ Ret = FFFTP_FAIL;\r
if(DoCWD(Path, NO, NO, NO) == FTP_COMPLETE)\r
{\r
/* サブフォルダも含めたリストを取得 */\r
DoCWD(Cur, NO, NO, NO);\r
\r
if(Sts == FTP_COMPLETE)\r
+ // ファイル一覧バグ修正\r
+// AddRemoteTreeToFileList(999, Path, RDIR_NLST, Base);\r
+ {\r
AddRemoteTreeToFileList(999, Path, RDIR_NLST, Base);\r
+ Ret = FFFTP_SUCCESS;\r
+ }\r
}\r
- return;\r
+ // ファイル一覧バグ修正\r
+// return;\r
+ return(Ret);\r
}\r
\r
\r
* 各フォルダに移動してリストを取得\r
*----------------------------------------------------------------------------*/\r
\r
-static void MakeRemoteTree2(char *Path, char *Cur, FILELIST **Base, int *CancelCheckWork)\r
+// ファイル一覧バグ修正\r
+//static void MakeRemoteTree2(char *Path, char *Cur, FILELIST **Base, int *CancelCheckWork)\r
+static int MakeRemoteTree2(char *Path, char *Cur, FILELIST **Base, int *CancelCheckWork)\r
{\r
+ // ファイル一覧バグ修正\r
+ int Ret;\r
int Sts;\r
FILELIST *CurList;\r
FILELIST *Pos;\r
FILELIST Pkt;\r
\r
+ // ファイル一覧バグ修正\r
+ Ret = FFFTP_FAIL;\r
/* VAX VMS は CWD xxx/yyy という指定ができないので */\r
/* CWD xxx, Cwd yyy と複数に分ける */\r
if(AskHostType() != HTYPE_VMS)\r
AddRemoteTreeToFileList(999, Path, RDIR_CWD, &CurList);\r
CopyTmpListToFileList(Base, CurList);\r
\r
+ // ファイル一覧バグ修正\r
+ Ret = FFFTP_SUCCESS;\r
+\r
Pos = CurList;\r
while(Pos != NULL)\r
{\r
/* そのディレクトリの中を検索 */\r
// MakeRemoteTree2(Pos->File, Cur, Base, CancelCheckWork);\r
if(Pkt.Link == NO)\r
- MakeRemoteTree2(Pos->File, Cur, Base, CancelCheckWork);\r
+ // ファイル一覧バグ修正\r
+// MakeRemoteTree2(Pos->File, Cur, Base, CancelCheckWork);\r
+ {\r
+ if(MakeRemoteTree2(Pos->File, Cur, Base, CancelCheckWork) == FFFTP_FAIL)\r
+ Ret = FFFTP_FAIL;\r
+ }\r
}\r
Pos = Pos->Next;\r
}\r
DeleteFileList(&CurList);\r
}\r
}\r
- return;\r
+ // ファイル一覧バグ修正\r
+// return;\r
+ return(Ret);\r
}\r
\r
\r
* なし\r
*----------------------------------------------------------------------------*/\r
\r
-static void MakeLocalTree(char *Path, FILELIST **Base)\r
+// ファイル一覧バグ修正\r
+//static void MakeLocalTree(char *Path, FILELIST **Base)\r
+static int MakeLocalTree(char *Path, FILELIST **Base)\r
{\r
+ // ファイル一覧バグ修正\r
+ int Sts;\r
char Src[FMAX_PATH+1];\r
HANDLE fHnd;\r
WIN32_FIND_DATA FindBuf;\r
FILELIST Pkt;\r
SYSTEMTIME TmpStime;\r
\r
+ // ファイル一覧バグ修正\r
+ Sts = FFFTP_FAIL;\r
+\r
strcpy(Src, Path);\r
SetYenTail(Src);\r
strcat(Src, "*");\r
\r
if((fHnd = FindFirstFileAttr(Src, &FindBuf, DispIgnoreHide)) != INVALID_HANDLE_VALUE)\r
{\r
+ // ファイル一覧バグ修正\r
+ Sts = FFFTP_SUCCESS;\r
do\r
{\r
if((FindBuf.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&\r
memset(&Pkt.Time, 0, sizeof(FILETIME));\r
AddFileList(&Pkt, Base);\r
\r
- MakeLocalTree(Src, Base);\r
+ // ファイル一覧バグ修正\r
+// MakeLocalTree(Src, Base);\r
+ if(MakeLocalTree(Src, Base) == FFFTP_FAIL)\r
+ Sts = FFFTP_FAIL;\r
}\r
}\r
while(FindNextFileAttr(fHnd, &FindBuf, DispIgnoreHide) == TRUE);\r
FindClose(fHnd);\r
}\r
- return;\r
+ // ファイル一覧バグ修正\r
+// return;\r
+ return(Sts);\r
}\r
\r
\r
\r
// UTF-8対応\r
// ファイル一覧から漢字コードを推測\r
-// 優先度はUTF-8、Shift_JIS、EUC、JISの順\r
+// å\84ªå\85\88度ã\81¯UTF-8ã\80\81Shift_JISã\80\81EUCã\80\81JISã\80\81UTF-8 HFS+ã\81®é \86\r
int AnalyzeNameKanjiCode(int Num)\r
{\r
char Str[FMAX_PATH+1];\r
int PointJIS;\r
int PointEUC;\r
int PointUTF8N;\r
+ int PointUTF8HFSX;\r
char* p;\r
+ CODECONVINFO cInfo1;\r
+ CODECONVINFO cInfo2;\r
+ char Buf[FMAX_PATH+1];\r
\r
NameKanjiCode = KANJI_AUTO;\r
Point = 0;\r
PointJIS = 0;\r
PointEUC = 0;\r
PointUTF8N = 0;\r
+ PointUTF8HFSX = 0;\r
MakeCacheFileName(Num, Str);\r
if((fd = fopen(Str, "rb")) != NULL)\r
{\r
}\r
if(!p)\r
{\r
+ // ASCII文字の範囲外\r
if(!CheckStringM(Name))\r
- PointUTF8N++;\r
- else\r
{\r
- switch(CheckKanjiCode(Name, strlen(Name), KANJI_SJIS))\r
- {\r
- case KANJI_SJIS:\r
- PointSJIS++;\r
- break;\r
- case KANJI_JIS:\r
- PointJIS++;\r
- break;\r
- case KANJI_EUC:\r
- PointEUC++;\r
- break;\r
- }\r
+ InitCodeConvInfo(&cInfo1);\r
+ cInfo1.KanaCnv = NO;\r
+ cInfo1.Str = Name;\r
+ cInfo1.StrLen = strlen(Name);\r
+ cInfo1.Buf = Buf;\r
+ cInfo1.BufSize = FMAX_PATH;\r
+ cInfo2 = cInfo1;\r
+ ConvUTF8NtoUTF8HFSX(&cInfo1);\r
+ ConvUTF8HFSXtoUTF8N(&cInfo2);\r
+ if(cInfo1.OutLen > (int)strlen(Name))\r
+ PointUTF8N++;\r
+ else\r
+ PointUTF8HFSX++;\r
+ if(cInfo2.OutLen < (int)strlen(Name))\r
+ PointUTF8HFSX++;\r
+ else\r
+ PointUTF8N++;\r
+ }\r
+ switch(CheckKanjiCode(Name, strlen(Name), KANJI_SJIS))\r
+ {\r
+ case KANJI_SJIS:\r
+ PointSJIS++;\r
+ break;\r
+ case KANJI_EUC:\r
+ PointEUC++;\r
+ break;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ // ASCII文字の範囲内\r
+ switch(CheckKanjiCode(Name, strlen(Name), KANJI_SJIS))\r
+ {\r
+ case KANJI_JIS:\r
+ PointJIS++;\r
+ break;\r
}\r
}\r
}\r
}\r
fclose(fd);\r
}\r
+ if(PointUTF8HFSX >= Point)\r
+ {\r
+ NameKanjiCode = KANJI_UTF8HFSX;\r
+ Point = PointUTF8HFSX;\r
+ }\r
if(PointJIS >= Point)\r
{\r
NameKanjiCode = KANJI_JIS;\r