OSDN Git Service

Update to b2ca3cbfefb9f644d74e81b6dbb28c759def7249 (1.99a-20171104).
[ffftp/ffftp.git] / ftpproc.c
index 7552c71..fa48c9b 100644 (file)
--- a/ftpproc.c
+++ b/ftpproc.c
@@ -71,7 +71,7 @@ static INT_PTR CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wP
 static INT_PTR CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
 static void CountMirrorFiles(HWND hDlg, TRANSPACKET *Pkt);\r
 static int AskMirrorNoTrn(char *Fname, int Mode);\r
-static int AskUpLoadFileAttr(char *Fname);\r
+static int AskUploadFileAttr(char *Fname);\r
 // 64ビット対応\r
 //static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
 static INT_PTR CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
@@ -108,6 +108,14 @@ extern SIZE MirrorDlgSize;
 extern int VaxSemicolon;\r
 extern int DebugConsole;\r
 extern int CancelFlg;\r
+// ディレクトリ自動作成\r
+extern int MakeAllDir;\r
+// ファイル一覧バグ修正\r
+extern int AbortOnListError;\r
+// ミラーリング設定追加\r
+extern int MirrorNoTransferContents; \r
+// タイムスタンプのバグ修正\r
+extern int DispTimeSeconds;\r
 \r
 /*===== ローカルなワーク =====*/\r
 \r
@@ -136,11 +144,52 @@ static double FileSize;           /* ファイル総容量 */
 *              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
-void DownLoadProc(int ChName, int ForceFile, int All)\r
+// ディレクトリ自動作成\r
+// ローカル側のパスから必要なフォルダを作成\r
+int MakeDirFromLocalPath(char* LocalFile, char* Old)\r
+{\r
+       TRANSPACKET Pkt;\r
+       char* pDelimiter;\r
+       char* pNext;\r
+       char* Cat;\r
+       int Len;\r
+       int Make;\r
+       pDelimiter = LocalFile;\r
+       Make = NO;\r
+       while(pNext = strchr(pDelimiter, '\\'))\r
+       {\r
+               Len = pNext - LocalFile;\r
+               strncpy(Pkt.LocalFile, LocalFile, Len);\r
+               Pkt.LocalFile[Len] = '\0';\r
+               if(strncmp(LocalFile, Old, Len + 1) != 0)\r
+               {\r
+                       Cat = Pkt.LocalFile + (pDelimiter - LocalFile);\r
+                       if(FnameCnv == FNAME_LOWER)\r
+                               _mbslwr(Cat);\r
+                       else if(FnameCnv == FNAME_UPPER)\r
+                               _mbsupr(Cat);\r
+                       ReplaceAll(Pkt.LocalFile, '/', '\\');\r
+\r
+                       strcpy(Pkt.Cmd, "MKD ");\r
+                       strcpy(Pkt.RemoteFile, "");\r
+                       AddTransFileList(&Pkt);\r
+\r
+                       Make = YES;\r
+               }\r
+               pDelimiter = pNext + 1;\r
+       }\r
+       return Make;\r
+}\r
+\r
+void DownloadProc(int ChName, int ForceFile, int All)\r
 {\r
        FILELIST *FileListBase;\r
        FILELIST *Pos;\r
        TRANSPACKET Pkt;\r
+       // ディレクトリ自動作成\r
+       char Tmp[FMAX_PATH+1];\r
+       // ファイル一覧バグ修正\r
+       int ListSts;\r
 \r
        // 同時接続対応\r
        CancelFlg = NO;\r
@@ -153,7 +202,9 @@ void DownLoadProc(int ChName, int ForceFile, int All)
 //             KeepTransferDialog(YES);\r
 \r
                FileListBase = NULL;\r
-               MakeSelectedFileList(WIN_REMOTE, (ForceFile == YES ? NO : YES), All, &FileListBase, &CancelFlg);\r
+               // ファイル一覧バグ修正\r
+//             MakeSelectedFileList(WIN_REMOTE, (ForceFile == YES ? NO : YES), All, &FileListBase, &CancelFlg);\r
+               ListSts = MakeSelectedFileList(WIN_REMOTE, (ForceFile == YES ? NO : YES), All, &FileListBase, &CancelFlg);\r
 \r
                if(AskNoFullPathMode() == YES)\r
                {\r
@@ -165,6 +216,9 @@ void DownLoadProc(int ChName, int ForceFile, int All)
                Pos = FileListBase;\r
                while(Pos != NULL)\r
                {\r
+                       // ファイル一覧バグ修正\r
+                       if((AbortOnListError == YES) && (ListSts == FFFTP_FAIL))\r
+                               break;\r
                        AskLocalCurDir(Pkt.LocalFile, FMAX_PATH);\r
                        SetYenTail(Pkt.LocalFile);\r
                        strcpy(TmpString, Pos->File);\r
@@ -244,11 +298,21 @@ void DownLoadProc(int ChName, int ForceFile, int All)
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                Pkt.KanaCnv = AskHostKanaCnv();\r
 \r
+                               // ディレクトリ自動作成\r
+                               strcpy(Tmp, Pkt.LocalFile);\r
                                Pkt.Mode = CheckLocalFile(&Pkt);        /* Pkt.ExistSize がセットされる */\r
+                               // ミラーリング設定追加\r
+                               Pkt.NoTransfer = NO;\r
                                if(Pkt.Mode == EXIST_ABORT)\r
                                        break;\r
                                else if(Pkt.Mode != EXIST_IGNORE)\r
+                               // ディレクトリ自動作成\r
+//                                     AddTransFileList(&Pkt);\r
+                               {\r
+                                       if(MakeAllDir == YES)\r
+                                               MakeDirFromLocalPath(Pkt.LocalFile, Tmp);\r
                                        AddTransFileList(&Pkt);\r
+                               }\r
                        }\r
                        Pos = Pos->Next;\r
                }\r
@@ -261,8 +325,12 @@ void DownLoadProc(int ChName, int ForceFile, int All)
                }\r
                DeleteFileList(&FileListBase);\r
 \r
-               strcpy(Pkt.Cmd, "GOQUIT");\r
-               AddTransFileList(&Pkt);\r
+               // 同時接続対応\r
+//             strcpy(Pkt.Cmd, "GOQUIT");\r
+//             AddTransFileList(&Pkt);\r
+\r
+               // バグ対策\r
+               AddNullTransFileList();\r
 \r
                GoForwardTransWindow();\r
 //             KeepTransferDialog(NO);\r
@@ -282,9 +350,11 @@ void DownLoadProc(int ChName, int ForceFile, int All)
 *              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
-void DirectDownLoadProc(char *Fname)\r
+void DirectDownloadProc(char *Fname)\r
 {\r
        TRANSPACKET Pkt;\r
+       // ディレクトリ自動作成\r
+       char Tmp[FMAX_PATH+1];\r
 \r
        // 同時接続対応\r
        CancelFlg = NO;\r
@@ -350,9 +420,19 @@ void DirectDownLoadProc(char *Fname)
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                Pkt.KanaCnv = AskHostKanaCnv();\r
 \r
+                               // ディレクトリ自動作成\r
+                               strcpy(Tmp, Pkt.LocalFile);\r
                                Pkt.Mode = CheckLocalFile(&Pkt);        /* Pkt.ExistSize がセットされる */\r
+                               // ミラーリング設定追加\r
+                               Pkt.NoTransfer = NO;\r
                                if((Pkt.Mode != EXIST_ABORT) && (Pkt.Mode != EXIST_IGNORE))\r
+                               // ディレクトリ自動作成\r
+//                                     AddTransFileList(&Pkt);\r
+                               {\r
+                                       if(MakeAllDir == YES)\r
+                                               MakeDirFromLocalPath(Pkt.LocalFile, Tmp);\r
                                        AddTransFileList(&Pkt);\r
+                               }\r
                        }\r
                }\r
 \r
@@ -363,8 +443,12 @@ void DirectDownLoadProc(char *Fname)
                        AddTransFileList(&Pkt);\r
                }\r
 \r
-               strcpy(Pkt.Cmd, "GOQUIT");\r
-               AddTransFileList(&Pkt);\r
+               // 同時接続対応\r
+//             strcpy(Pkt.Cmd, "GOQUIT");\r
+//             AddTransFileList(&Pkt);\r
+\r
+               // バグ対策\r
+               AddNullTransFileList();\r
 \r
                GoForwardTransWindow();\r
 //             KeepTransferDialog(NO);\r
@@ -384,7 +468,7 @@ void DirectDownLoadProc(char *Fname)
 *              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
-void InputDownLoadProc(void)\r
+void InputDownloadProc(void)\r
 {\r
        char Path[FMAX_PATH+1];\r
        int Tmp;\r
@@ -394,7 +478,7 @@ void InputDownLoadProc(void)
        strcpy(Path, "");\r
        if(InputDialogBox(downname_dlg, GetMainHwnd(), NULL, Path, FMAX_PATH, &Tmp, IDH_HELP_TOPIC_0000001) == YES)\r
        {\r
-               DirectDownLoadProc(Path);\r
+               DirectDownloadProc(Path);\r
        }\r
 \r
 //     EnableUserOpe();\r
@@ -424,6 +508,8 @@ void MirrorDownloadProc(int Notify)
        char *Cat;\r
        int Level;\r
        int Mode;\r
+       // ファイル一覧バグ修正\r
+       int ListSts;\r
 \r
        // 同時接続対応\r
        CancelFlg = NO;\r
@@ -444,9 +530,14 @@ void MirrorDownloadProc(int Notify)
                        /*===== ファイルリスト取得 =====*/\r
 \r
                        LocalListBase = NULL;\r
-                       MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg);\r
+                       // ファイル一覧バグ修正\r
+//                     MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg);\r
+                       ListSts = MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg);\r
                        RemoteListBase = NULL;\r
-                       MakeSelectedFileList(WIN_REMOTE, YES, YES, &RemoteListBase, &CancelFlg);\r
+                       // ファイル一覧バグ修正\r
+//                     MakeSelectedFileList(WIN_REMOTE, YES, YES, &RemoteListBase, &CancelFlg);\r
+                       if(ListSts == FFFTP_SUCCESS)\r
+                               ListSts = MakeSelectedFileList(WIN_REMOTE, YES, YES, &RemoteListBase, &CancelFlg);\r
 \r
                        RemotePos = RemoteListBase;\r
                        while(RemotePos != NULL)\r
@@ -605,14 +696,19 @@ void MirrorDownloadProc(int Notify)
                                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                                Pkt.KanaCnv = AskHostKanaCnv();\r
                                                Pkt.Mode = EXIST_OVW;\r
+                                               // ミラーリング設定追加\r
+                                               Pkt.NoTransfer = MirrorNoTransferContents;\r
                                                AddTmpTransFileList(&Pkt, &Base);\r
                                        }\r
                                }\r
                                RemotePos = RemotePos->Next;\r
                        }\r
 \r
-                       if((Notify == YES) ||\r
-                          (DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(mirrordown_notify_dlg), GetMainHwnd(), MirrorDispListCallBack, (LPARAM)&Base) == YES))\r
+                       // ファイル一覧バグ修正\r
+//                     if((Notify == YES) ||\r
+//                        (DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(mirrordown_notify_dlg), GetMainHwnd(), MirrorDispListCallBack, (LPARAM)&Base) == YES))\r
+                       if(((AbortOnListError == NO) || (ListSts == FFFTP_SUCCESS)) && ((Notify == YES) ||\r
+                          (DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(mirrordown_notify_dlg), GetMainHwnd(), MirrorDispListCallBack, (LPARAM)&Base) == YES)))\r
                        {\r
                                if(AskNoFullPathMode() == YES)\r
                                {\r
@@ -629,12 +725,16 @@ void MirrorDownloadProc(int Notify)
                                        AddTransFileList(&Pkt);\r
                                }\r
 \r
-                               strcpy(Pkt.Cmd, "GOQUIT");\r
-                               AddTransFileList(&Pkt);\r
+                               // 同時接続対応\r
+//                             strcpy(Pkt.Cmd, "GOQUIT");\r
+//                             AddTransFileList(&Pkt);\r
                        }\r
                        else\r
                                EraseTmpTransFileList(&Base);\r
 \r
+                       // バグ対策\r
+                       AddNullTransFileList();\r
+\r
                        DeleteFileList(&LocalListBase);\r
                        DeleteFileList(&RemoteListBase);\r
 \r
@@ -669,18 +769,28 @@ static void DispMirrorFiles(FILELIST *Local, FILELIST *Remote)
                while(Local != NULL)\r
                {\r
                        FileTimeToLocalFileTime(&Local->Time, &fTime);\r
-                       FileTimeToSystemTime(&fTime, &sTime);\r
-                       sprintf(Date, "%04d/%02d/%02d %02d:%02d:%02d.%04d", \r
-                               sTime.wYear, sTime.wMonth, sTime.wDay, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);\r
+                       // タイムスタンプのバグ修正\r
+//                     FileTimeToSystemTime(&fTime, &sTime);\r
+//                     sprintf(Date, "%04d/%02d/%02d %02d:%02d:%02d.%04d", \r
+//                             sTime.wYear, sTime.wMonth, sTime.wDay, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);\r
+                       if(FileTimeToSystemTime(&fTime, &sTime))\r
+                               sprintf(Date, "%04d/%02d/%02d %02d:%02d:%02d.%04d", sTime.wYear, sTime.wMonth, sTime.wDay, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);\r
+                       else\r
+                               strcpy(Date, "");\r
                        DoPrintf("LOCAL  : %s %s [%s] %s", Local->Attr==1?"YES":"NO ", Local->Node==NODE_DIR?"DIR ":"FILE", Date, Local->File);\r
                        Local = Local->Next;\r
                }\r
                while(Remote != NULL)\r
                {\r
                        FileTimeToLocalFileTime(&Remote->Time, &fTime);\r
-                       FileTimeToSystemTime(&fTime, &sTime);\r
-                       sprintf(Date, "%04d/%02d/%02d %02d:%02d:%02d.%04d", \r
-                               sTime.wYear, sTime.wMonth, sTime.wDay, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);\r
+                       // タイムスタンプのバグ修正\r
+//                     FileTimeToSystemTime(&fTime, &sTime);\r
+//                     sprintf(Date, "%04d/%02d/%02d %02d:%02d:%02d.%04d", \r
+//                             sTime.wYear, sTime.wMonth, sTime.wDay, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);\r
+                       if(FileTimeToSystemTime(&fTime, &sTime))\r
+                               sprintf(Date, "%04d/%02d/%02d %02d:%02d:%02d.%04d", sTime.wYear, sTime.wMonth, sTime.wDay, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);\r
+                       else\r
+                               strcpy(Date, "");\r
                        DoPrintf("REMOTE : %s %s [%s] %s", Remote->Attr==1?"YES":"NO ", Remote->Node==NODE_DIR?"DIR ":"FILE", Date, Remote->File);\r
                        Remote = Remote->Next;\r
                }\r
@@ -771,6 +881,8 @@ static int CheckLocalFile(TRANSPACKET *Pkt)
        HANDLE fHnd;\r
        WIN32_FIND_DATA Find;\r
        int Ret;\r
+       // タイムスタンプのバグ修正\r
+       SYSTEMTIME TmpStime;\r
 \r
        Ret = EXIST_OVW;\r
        Pkt->ExistSize = 0;\r
@@ -796,11 +908,29 @@ static int CheckLocalFile(TRANSPACKET *Pkt)
                        if(Ret == EXIST_NEW)\r
                        {\r
                                /*ファイル日付チェック */\r
+                               // タイムスタンプのバグ修正\r
+                               if(FileTimeToSystemTime(&Find.ftLastWriteTime, &TmpStime))\r
+                               {\r
+                                       if(DispTimeSeconds == NO)\r
+                                               TmpStime.wSecond = 0;\r
+                                       TmpStime.wMilliseconds = 0;\r
+                                       SystemTimeToFileTime(&TmpStime, &Find.ftLastWriteTime);\r
+                               }\r
+                               else\r
+                                       memset(&Find.ftLastWriteTime, 0, sizeof(FILETIME));\r
                                if(CompareFileTime(&Find.ftLastWriteTime, &Pkt->Time) < 0)\r
                                        Ret = EXIST_OVW;\r
                                else\r
                                        Ret = EXIST_IGNORE;\r
                        }\r
+                       // 同じ名前のファイルの処理方法追加\r
+                       if(Ret == EXIST_LARGE)\r
+                       {\r
+                               if(MakeLongLong(Find.nFileSizeHigh, Find.nFileSizeLow) < Pkt->Size)\r
+                                       Ret = EXIST_OVW;\r
+                               else\r
+                                       Ret = EXIST_IGNORE;\r
+                       }\r
                }\r
        }\r
        return(Ret);\r
@@ -824,11 +954,19 @@ static int CheckLocalFile(TRANSPACKET *Pkt)
 static INT_PTR CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
 {\r
        static TRANSPACKET *Pkt;\r
+       // 同じ名前のファイルの処理方法追加\r
+//     static const RADIOBUTTON DownExistButton[] = {\r
+//             { DOWN_EXIST_OVW, EXIST_OVW },\r
+//             { DOWN_EXIST_NEW, EXIST_NEW },\r
+//             { DOWN_EXIST_RESUME, EXIST_RESUME },\r
+//             { DOWN_EXIST_IGNORE, EXIST_IGNORE }\r
+//     };\r
        static const RADIOBUTTON DownExistButton[] = {\r
                { DOWN_EXIST_OVW, EXIST_OVW },\r
                { DOWN_EXIST_NEW, EXIST_NEW },\r
                { DOWN_EXIST_RESUME, EXIST_RESUME },\r
-               { DOWN_EXIST_IGNORE, EXIST_IGNORE }\r
+               { DOWN_EXIST_IGNORE, EXIST_IGNORE },\r
+               { DOWN_EXIST_LARGE, EXIST_LARGE }\r
        };\r
        #define DOWNEXISTBUTTONS        (sizeof(DownExistButton)/sizeof(RADIOBUTTON))\r
 \r
@@ -867,7 +1005,7 @@ static INT_PTR CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM
                                        hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000009);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -887,7 +1025,70 @@ static INT_PTR CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM
 *              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
-void UpLoadListProc(int ChName, int All)\r
+// ディレクトリ自動作成\r
+// リモート側のパスから必要なディレクトリを作成\r
+int MakeDirFromRemotePath(char* RemoteFile, char* Old, int FirstAdd)\r
+{\r
+       TRANSPACKET Pkt;\r
+       TRANSPACKET Pkt1;\r
+       char* pDelimiter;\r
+       char* pNext;\r
+       char* Cat;\r
+       int Len;\r
+       int Make;\r
+       pDelimiter = RemoteFile;\r
+       Make = NO;\r
+       while(pNext = strchr(pDelimiter, '/'))\r
+       {\r
+               Len = pNext - RemoteFile;\r
+               strncpy(Pkt.RemoteFile, RemoteFile, Len);\r
+               Pkt.RemoteFile[Len] = '\0';\r
+               if(strncmp(RemoteFile, Old, Len + 1) != 0)\r
+               {\r
+                       Cat = Pkt.RemoteFile + (pDelimiter - RemoteFile);\r
+                       if(FnameCnv == FNAME_LOWER)\r
+                               _mbslwr(Cat);\r
+                       else if(FnameCnv == FNAME_UPPER)\r
+                               _mbsupr(Cat);\r
+#if defined(HAVE_TANDEM)\r
+                       Pkt.FileCode = 0;\r
+                       Pkt.PriExt = DEF_PRIEXT;\r
+                       Pkt.SecExt = DEF_SECEXT;\r
+                       Pkt.MaxExt = DEF_MAXEXT;\r
+#endif\r
+                       ReplaceAll(Pkt.RemoteFile, '\\', '/');\r
+\r
+                       if(AskHostType() == HTYPE_ACOS)\r
+                       {\r
+                               strcpy(Pkt.RemoteFile, "'");\r
+                               strcat(Pkt.RemoteFile, AskHostLsName());\r
+                               strcat(Pkt.RemoteFile, "(");\r
+                               strcat(Pkt.RemoteFile, Cat);\r
+                               strcat(Pkt.RemoteFile, ")");\r
+                               strcat(Pkt.RemoteFile, "'");\r
+                       }\r
+                       else if(AskHostType() == HTYPE_ACOS_4)\r
+                               strcpy(Pkt.RemoteFile, Cat);\r
+\r
+                       if((FirstAdd == YES) && (AskNoFullPathMode() == YES))\r
+                       {\r
+                               strcpy(Pkt1.Cmd, "SETCUR");\r
+                               AskRemoteCurDir(Pkt1.RemoteFile, FMAX_PATH);\r
+                               AddTransFileList(&Pkt1);\r
+                       }\r
+                       FirstAdd = NO;\r
+                       strcpy(Pkt.Cmd, "MKD ");\r
+                       strcpy(Pkt.LocalFile, "");\r
+                       AddTransFileList(&Pkt);\r
+\r
+                       Make = YES;\r
+               }\r
+               pDelimiter = pNext + 1;\r
+       }\r
+       return Make;\r
+}\r
+\r
+void UploadListProc(int ChName, int All)\r
 {\r
        FILELIST *FileListBase;\r
        FILELIST *Pos;\r
@@ -897,6 +1098,8 @@ void UpLoadListProc(int ChName, int All)
        FILELIST *RemoteList;\r
        char Tmp[FMAX_PATH+1];\r
        int FirstAdd;\r
+       // ファイル一覧バグ修正\r
+       int ListSts;\r
 \r
        // 同時接続対応\r
        CancelFlg = NO;\r
@@ -907,7 +1110,9 @@ void UpLoadListProc(int ChName, int All)
 \r
                // ローカル側で選ばれているファイルをFileListBaseに登録\r
                FileListBase = NULL;\r
-               MakeSelectedFileList(WIN_LOCAL, YES, All, &FileListBase, &CancelFlg);\r
+               // ファイル一覧バグ修正\r
+//             MakeSelectedFileList(WIN_LOCAL, YES, All, &FileListBase, &CancelFlg);\r
+               ListSts = MakeSelectedFileList(WIN_LOCAL, YES, All, &FileListBase, &CancelFlg);\r
 \r
                // 現在ホスト側のファイル一覧に表示されているものをRemoteListに登録\r
                // 同名ファイルチェック用\r
@@ -920,6 +1125,9 @@ void UpLoadListProc(int ChName, int All)
                Pos = FileListBase;\r
                while(Pos != NULL)\r
                {\r
+                       // ファイル一覧バグ修正\r
+                       if((AbortOnListError == YES) && (ListSts == FFFTP_FAIL))\r
+                               break;\r
                        AskRemoteCurDir(Pkt.RemoteFile, FMAX_PATH);\r
                        SetSlashTail(Pkt.RemoteFile);\r
                        Cat = strchr(Pkt.RemoteFile, NUL);\r
@@ -958,6 +1166,16 @@ void UpLoadListProc(int ChName, int All)
                                else\r
                                        break;\r
                        }\r
+                       // バグ修正\r
+                       AskRemoteCurDir(Tmp, FMAX_PATH);\r
+                       SetSlashTail(Tmp);\r
+                       if(strncmp(Pkt.RemoteFile, Tmp, strlen(Tmp)) != 0)\r
+                       {\r
+                               if((Cat = strrchr(Pkt.RemoteFile, '/')) != NULL)\r
+                                       Cat++;\r
+                               else\r
+                                       Cat = Pkt.RemoteFile;\r
+                       }\r
                        ReplaceAll(Pkt.RemoteFile, '\\', '/');\r
 \r
                        if(AskHostType() == HTYPE_ACOS)\r
@@ -1014,9 +1232,11 @@ void UpLoadListProc(int ChName, int All)
 \r
                                strcpy(Pkt.Cmd, "STOR ");\r
                                Pkt.Type = AskTransferTypeAssoc(Pkt.LocalFile, AskTransferType());\r
-                               Pkt.Size = 0;\r
+                               // バグ修正\r
+//                             Pkt.Size = 0;\r
+                               Pkt.Size = Pos->Size;\r
                                Pkt.Time = Pos->Time;\r
-                               Pkt.Attr = AskUpLoadFileAttr(Pkt.RemoteFile);\r
+                               Pkt.Attr = AskUploadFileAttr(Pkt.RemoteFile);\r
                                Pkt.KanjiCode = AskHostKanjiCode();\r
                                // UTF-8対応\r
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
@@ -1026,11 +1246,21 @@ void UpLoadListProc(int ChName, int All)
                                        CalcExtentSize(&Pkt, Pos->Size);\r
                                }\r
 #endif\r
+                               // ディレクトリ自動作成\r
+                               strcpy(Tmp, Pkt.RemoteFile);\r
                                Pkt.Mode = CheckRemoteFile(&Pkt, RemoteList);\r
+                               // ミラーリング設定追加\r
+                               Pkt.NoTransfer = NO;\r
                                if(Pkt.Mode == EXIST_ABORT)\r
                                        break;\r
                                else if(Pkt.Mode != EXIST_IGNORE)\r
                                {\r
+                                       // ディレクトリ自動作成\r
+                                       if(MakeAllDir == YES)\r
+                                       {\r
+                                               if(MakeDirFromRemotePath(Pkt.RemoteFile, Tmp, FirstAdd) == YES)\r
+                                                       FirstAdd = NO;\r
+                                       }\r
                                        if((FirstAdd == YES) && (AskNoFullPathMode() == YES))\r
                                        {\r
                                                strcpy(Pkt1.Cmd, "SETCUR");\r
@@ -1056,8 +1286,12 @@ void UpLoadListProc(int ChName, int All)
 \r
                DeleteFileList(&FileListBase);\r
 \r
-               strcpy(Pkt.Cmd, "GOQUIT");\r
-               AddTransFileList(&Pkt);\r
+               // 同時接続対応\r
+//             strcpy(Pkt.Cmd, "GOQUIT");\r
+//             AddTransFileList(&Pkt);\r
+\r
+               // バグ対策\r
+               AddNullTransFileList();\r
 \r
                GoForwardTransWindow();\r
 \r
@@ -1076,7 +1310,7 @@ void UpLoadListProc(int ChName, int All)
 *              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
-void UpLoadDragProc(WPARAM wParam)\r
+void UploadDragProc(WPARAM wParam)\r
 {\r
        FILELIST *FileListBase;\r
        FILELIST *Pos;\r
@@ -1180,9 +1414,11 @@ void UpLoadDragProc(WPARAM wParam)
 \r
                                strcpy(Pkt.Cmd, "STOR ");\r
                                Pkt.Type = AskTransferTypeAssoc(Pkt.LocalFile, AskTransferType());\r
-                               Pkt.Size = 0;\r
+                               // バグ修正\r
+//                             Pkt.Size = 0;\r
+                               Pkt.Size = Pos->Size;\r
                                Pkt.Time = Pos->Time;\r
-                               Pkt.Attr = AskUpLoadFileAttr(Pkt.RemoteFile);\r
+                               Pkt.Attr = AskUploadFileAttr(Pkt.RemoteFile);\r
                                Pkt.KanjiCode = AskHostKanjiCode();\r
                                // UTF-8対応\r
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
@@ -1193,11 +1429,21 @@ void UpLoadDragProc(WPARAM wParam)
                                        CalcExtentSize(&Pkt, Pos->Size);\r
                                }\r
 #endif\r
+                               // ディレクトリ自動作成\r
+                               strcpy(Tmp, Pkt.RemoteFile);\r
                                Pkt.Mode = CheckRemoteFile(&Pkt, RemoteList);\r
+                               // ミラーリング設定追加\r
+                               Pkt.NoTransfer = NO;\r
                                if(Pkt.Mode == EXIST_ABORT)\r
                                        break;\r
                                else if(Pkt.Mode != EXIST_IGNORE)\r
                                {\r
+                                       // ディレクトリ自動作成\r
+                                       if(MakeAllDir == YES)\r
+                                       {\r
+                                               if(MakeDirFromRemotePath(Pkt.RemoteFile, Tmp, FirstAdd) == YES)\r
+                                                       FirstAdd = NO;\r
+                                       }\r
                                        if((FirstAdd == YES) && (AskNoFullPathMode() == YES))\r
                                        {\r
                                                strcpy(Pkt1.Cmd, "SETCUR");\r
@@ -1223,8 +1469,12 @@ void UpLoadDragProc(WPARAM wParam)
 \r
                DeleteFileList(&FileListBase);\r
 \r
-               strcpy(Pkt.Cmd, "GOQUIT");\r
-               AddTransFileList(&Pkt);\r
+               // 同時接続対応\r
+//             strcpy(Pkt.Cmd, "GOQUIT");\r
+//             AddTransFileList(&Pkt);\r
+\r
+               // バグ対策\r
+               AddNullTransFileList();\r
 \r
                GoForwardTransWindow();\r
 \r
@@ -1258,6 +1508,8 @@ void MirrorUploadProc(int Notify)
        SYSTEMTIME TmpStime;\r
        FILETIME TmpFtimeL;\r
        FILETIME TmpFtimeR;\r
+       // ファイル一覧バグ修正\r
+       int ListSts;\r
 \r
        // 同時接続対応\r
        CancelFlg = NO;\r
@@ -1278,9 +1530,14 @@ void MirrorUploadProc(int Notify)
                        /*===== ファイルリスト取得 =====*/\r
 \r
                        LocalListBase = NULL;\r
-                       MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg);\r
+                       // ファイル一覧バグ修正\r
+//                     MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg);\r
+                       ListSts = MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg);\r
                        RemoteListBase = NULL;\r
-                       MakeSelectedFileList(WIN_REMOTE, YES, YES, &RemoteListBase, &CancelFlg);\r
+                       // ファイル一覧バグ修正\r
+//                     MakeSelectedFileList(WIN_REMOTE, YES, YES, &RemoteListBase, &CancelFlg);\r
+                       if(ListSts == FFFTP_SUCCESS)\r
+                               ListSts = MakeSelectedFileList(WIN_REMOTE, YES, YES, &RemoteListBase, &CancelFlg);\r
 \r
                        LocalPos = LocalListBase;\r
                        while(LocalPos != NULL)\r
@@ -1357,19 +1614,37 @@ void MirrorUploadProc(int Notify)
                                                                FileTimeToLocalFileTime(&RemotePos->Time, &TmpFtimeR);\r
                                                                if((RemotePos->InfoExist & FINFO_TIME) == 0)\r
                                                                {\r
-                                                                       FileTimeToSystemTime(&TmpFtimeL, &TmpStime);\r
-                                                                       TmpStime.wHour = 0;\r
-                                                                       TmpStime.wMinute = 0;\r
-                                                                       TmpStime.wSecond = 0;\r
-                                                                       TmpStime.wMilliseconds = 0;\r
-                                                                       SystemTimeToFileTime(&TmpStime, &TmpFtimeL);\r
-\r
-                                                                       FileTimeToSystemTime(&TmpFtimeR, &TmpStime);\r
-                                                                       TmpStime.wHour = 0;\r
-                                                                       TmpStime.wMinute = 0;\r
-                                                                       TmpStime.wSecond = 0;\r
-                                                                       TmpStime.wMilliseconds = 0;\r
-                                                                       SystemTimeToFileTime(&TmpStime, &TmpFtimeR);\r
+                                                                       // タイムスタンプのバグ修正\r
+//                                                                     FileTimeToSystemTime(&TmpFtimeL, &TmpStime);\r
+//                                                                     TmpStime.wHour = 0;\r
+//                                                                     TmpStime.wMinute = 0;\r
+//                                                                     TmpStime.wSecond = 0;\r
+//                                                                     TmpStime.wMilliseconds = 0;\r
+//                                                                     SystemTimeToFileTime(&TmpStime, &TmpFtimeL);\r
+                                                                       if(FileTimeToSystemTime(&TmpFtimeL, &TmpStime))\r
+                                                                       {\r
+                                                                               TmpStime.wHour = 0;\r
+                                                                               TmpStime.wMinute = 0;\r
+                                                                               TmpStime.wSecond = 0;\r
+                                                                               TmpStime.wMilliseconds = 0;\r
+                                                                               SystemTimeToFileTime(&TmpStime, &TmpFtimeL);\r
+                                                                       }\r
+\r
+                                                                       // タイムスタンプのバグ修正\r
+//                                                                     FileTimeToSystemTime(&TmpFtimeR, &TmpStime);\r
+//                                                                     TmpStime.wHour = 0;\r
+//                                                                     TmpStime.wMinute = 0;\r
+//                                                                     TmpStime.wSecond = 0;\r
+//                                                                     TmpStime.wMilliseconds = 0;\r
+//                                                                     SystemTimeToFileTime(&TmpStime, &TmpFtimeR);\r
+                                                                       if(FileTimeToSystemTime(&TmpFtimeR, &TmpStime))\r
+                                                                       {\r
+                                                                               TmpStime.wHour = 0;\r
+                                                                               TmpStime.wMinute = 0;\r
+                                                                               TmpStime.wSecond = 0;\r
+                                                                               TmpStime.wMilliseconds = 0;\r
+                                                                               SystemTimeToFileTime(&TmpStime, &TmpFtimeR);\r
+                                                                       }\r
                                                                }\r
                                                                RemotePos->Attr = NO;\r
                                                                if(CompareFileTime(&TmpFtimeL, &TmpFtimeR) <= 0)\r
@@ -1457,9 +1732,11 @@ void MirrorUploadProc(int Notify)
 \r
                                                strcpy(Pkt.Cmd, "STOR ");\r
                                                Pkt.Type = AskTransferTypeAssoc(Pkt.LocalFile, AskTransferType());\r
-                                               Pkt.Size = 0;\r
+                                               // バグ修正\r
+//                                             Pkt.Size = 0;\r
+                                               Pkt.Size = LocalPos->Size;\r
                                                Pkt.Time = LocalPos->Time;\r
-                                               Pkt.Attr = AskUpLoadFileAttr(Pkt.RemoteFile);\r
+                                               Pkt.Attr = AskUploadFileAttr(Pkt.RemoteFile);\r
                                                Pkt.KanjiCode = AskHostKanjiCode();\r
                                                // UTF-8対応\r
                                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
@@ -1470,14 +1747,19 @@ void MirrorUploadProc(int Notify)
                                                }\r
 #endif\r
                                                Pkt.Mode = EXIST_OVW;\r
+                                               // ミラーリング設定追加\r
+                                               Pkt.NoTransfer = MirrorNoTransferContents;\r
                                                AddTmpTransFileList(&Pkt, &Base);\r
                                        }\r
                                }\r
                                LocalPos = LocalPos->Next;\r
                        }\r
 \r
-                       if((Notify == YES) ||\r
-                          (DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(mirror_notify_dlg), GetMainHwnd(), MirrorDispListCallBack, (LPARAM)&Base) == YES))\r
+                       // ファイル一覧バグ修正\r
+//                     if((Notify == YES) ||\r
+//                        (DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(mirror_notify_dlg), GetMainHwnd(), MirrorDispListCallBack, (LPARAM)&Base) == YES))\r
+                       if(((AbortOnListError == NO) || (ListSts == FFFTP_SUCCESS)) && ((Notify == YES) ||\r
+                          (DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(mirror_notify_dlg), GetMainHwnd(), MirrorDispListCallBack, (LPARAM)&Base) == YES)))\r
                        {\r
                                if(AskNoFullPathMode() == YES)\r
                                {\r
@@ -1494,12 +1776,16 @@ void MirrorUploadProc(int Notify)
                                        AddTransFileList(&Pkt);\r
                                }\r
 \r
-                               strcpy(Pkt.Cmd, "GOQUIT");\r
-                               AddTransFileList(&Pkt);\r
+                               // 同時接続対応\r
+//                             strcpy(Pkt.Cmd, "GOQUIT");\r
+//                             AddTransFileList(&Pkt);\r
                        }\r
                        else\r
                                EraseTmpTransFileList(&Base);\r
 \r
+                       // バグ対策\r
+                       AddNullTransFileList();\r
+\r
                        DeleteFileList(&LocalListBase);\r
                        DeleteFileList(&RemoteListBase);\r
 \r
@@ -1594,7 +1880,7 @@ static INT_PTR CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wP
                                        else\r
                                                hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000012);\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -1618,7 +1904,9 @@ static INT_PTR CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM
 {\r
        static DIALOGSIZE DlgSize = {\r
                { MIRROR_DEL, MIRROR_SIZEGRIP, -1 },\r
-               { IDOK, IDCANCEL, IDHELP, MIRROR_DEL, MIRROR_COPYNUM, MIRROR_MAKENUM, MIRROR_DELNUM, MIRROR_SIZEGRIP, -1 },\r
+               // ミラーリング設定追加\r
+//             { IDOK, IDCANCEL, IDHELP, MIRROR_DEL, MIRROR_COPYNUM, MIRROR_MAKENUM, MIRROR_DELNUM, MIRROR_SIZEGRIP, -1 },\r
+               { IDOK, IDCANCEL, IDHELP, MIRROR_DEL, MIRROR_COPYNUM, MIRROR_MAKENUM, MIRROR_DELNUM, MIRROR_SIZEGRIP, MIRROR_NO_TRANSFER, -1 },\r
                { MIRROR_LIST, -1 },\r
                { 0, 0 },\r
                { 0, 0 }\r
@@ -1629,9 +1917,18 @@ static INT_PTR CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM
        char Tmp[FMAX_PATH+1+6];\r
        int Num;\r
        int *List;\r
+       // バグ修正\r
+       RECT Rect;\r
 \r
        switch (iMessage)\r
        {\r
+               // バグ修正\r
+               case WM_SIZE :\r
+                       GetWindowRect(hDlg, &Rect);\r
+                       DlgSizeChange(hDlg, &DlgSize, &Rect, 0);\r
+                       RedrawWindow(hDlg, NULL, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_ALLCHILDREN);\r
+                       break;\r
+\r
                case WM_INITDIALOG :\r
                        Base = (TRANSPACKET **)lParam;\r
                        Pos = *Base;\r
@@ -1660,6 +1957,8 @@ static INT_PTR CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM
                        CountMirrorFiles(hDlg, *Base);\r
                        DlgSizeInit(hDlg, &DlgSize, &MirrorDlgSize);\r
                        EnableWindow(GetDlgItem(hDlg, MIRROR_DEL), FALSE);\r
+                       // ミラーリング設定追加\r
+                       SendDlgItemMessage(hDlg, MIRROR_NO_TRANSFER, BM_SETCHECK, MirrorNoTransferContents, 0);\r
                        return(TRUE);\r
 \r
                case WM_COMMAND :\r
@@ -1704,14 +2003,25 @@ static INT_PTR CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM
                                        }\r
                                        break;\r
 \r
+                               // ミラーリング設定追加\r
+                               case MIRROR_NO_TRANSFER :\r
+                                       Pos = *Base;\r
+                                       while(Pos != NULL)\r
+                                       {\r
+                                               if(strncmp(Pos->Cmd, "STOR", 4) == 0 || strncmp(Pos->Cmd, "RETR", 4) == 0)\r
+                                                       Pos->NoTransfer = SendDlgItemMessage(hDlg, MIRROR_NO_TRANSFER, BM_GETCHECK, 0, 0);\r
+                                               Pos = Pos->Next;\r
+                                       }\r
+                                       break;\r
+\r
                                case IDHELP :\r
                                        hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000012);\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
 \r
                case WM_SIZING :\r
                        DlgSizeChange(hDlg, &DlgSize, (RECT *)lParam, (int)wParam);\r
-                   return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -1831,7 +2141,7 @@ static int AskMirrorNoTrn(char *Fname, int Mode)
 *              int 属性 (-1=設定なし)\r
 *----------------------------------------------------------------------------*/\r
 \r
-static int AskUpLoadFileAttr(char *Fname)\r
+static int AskUploadFileAttr(char *Fname)\r
 {\r
        int Ret;\r
        int Sts;\r
@@ -1915,6 +2225,14 @@ static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList)
                                else\r
                                        Ret = EXIST_IGNORE;\r
                        }\r
+                       // 同じ名前のファイルの処理方法追加\r
+                       if(Ret == EXIST_LARGE)\r
+                       {\r
+                               if(Exist->Size < Pkt->Size)\r
+                                       Ret = EXIST_OVW;\r
+                               else\r
+                                       Ret = EXIST_IGNORE;\r
+                       }\r
                }\r
        }\r
        return(Ret);\r
@@ -1938,12 +2256,21 @@ static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList)
 static INT_PTR CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
 {\r
        static TRANSPACKET *Pkt;\r
+       // 同じ名前のファイルの処理方法追加\r
+//     static const RADIOBUTTON UpExistButton[] = {\r
+//             { UP_EXIST_OVW, EXIST_OVW },\r
+//             { UP_EXIST_NEW, EXIST_NEW },\r
+//             { UP_EXIST_RESUME, EXIST_RESUME },\r
+//             { UP_EXIST_UNIQUE, EXIST_UNIQUE },\r
+//             { UP_EXIST_IGNORE, EXIST_IGNORE }\r
+//     };\r
        static const RADIOBUTTON UpExistButton[] = {\r
                { UP_EXIST_OVW, EXIST_OVW },\r
                { UP_EXIST_NEW, EXIST_NEW },\r
                { UP_EXIST_RESUME, EXIST_RESUME },\r
                { UP_EXIST_UNIQUE, EXIST_UNIQUE },\r
-               { UP_EXIST_IGNORE, EXIST_IGNORE }\r
+               { UP_EXIST_IGNORE, EXIST_IGNORE },\r
+               { UP_EXIST_LARGE, EXIST_LARGE }\r
        };\r
        #define UPEXISTBUTTONS  (sizeof(UpExistButton)/sizeof(RADIOBUTTON))\r
 \r
@@ -1983,7 +2310,7 @@ static INT_PTR CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM w
                                        hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000011);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -2030,7 +2357,7 @@ static INT_PTR CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM
                                        EndDialog(hDlg, NO_ALL);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -2080,7 +2407,7 @@ static INT_PTR CALLBACK UpDownAsWithExtDialogCallBack(HWND hDlg, UINT iMessage,
                                        EndDialog(hDlg, NO_ALL);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -2110,28 +2437,43 @@ void DeleteProc(void)
        CancelFlg = NO;\r
 \r
        // デッドロック対策\r
-       DisableUserOpe();\r
-       Sts = YES;\r
-       AskRemoteCurDir(CurDir, FMAX_PATH);\r
-       FileListBase = NULL;\r
+//     Sts = YES;\r
+//     AskRemoteCurDir(CurDir, FMAX_PATH);\r
+//     FileListBase = NULL;\r
+//     if(GetFocus() == GetLocalHwnd())\r
+//     {\r
+//             Win = WIN_LOCAL;\r
+//             MakeSelectedFileList(Win, NO, NO, &FileListBase, &CancelFlg);\r
+//     }\r
+//     else\r
+//     {\r
+//             Win = WIN_REMOTE;\r
+//             if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
+//                     MakeSelectedFileList(Win, YES, NO, &FileListBase, &CancelFlg);\r
+//             else\r
+//                     Sts = NO;\r
+//     }\r
+       Sts = FFFTP_SUCCESS;\r
        if(GetFocus() == GetLocalHwnd())\r
-       {\r
                Win = WIN_LOCAL;\r
-               MakeSelectedFileList(Win, NO, NO, &FileListBase, &CancelFlg);\r
-       }\r
        else\r
        {\r
                Win = WIN_REMOTE;\r
-               if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
-                       MakeSelectedFileList(Win, YES, NO, &FileListBase, &CancelFlg);\r
-               else\r
-                       Sts = NO;\r
+               Sts = CheckClosedAndReconnect();\r
        }\r
 \r
-       if(Sts == YES)\r
+       // デッドロック対策\r
+//     if(Sts == YES)\r
+       if(Sts == FFFTP_SUCCESS)\r
        {\r
                // デッドロック対策\r
-//             DisableUserOpe();\r
+               DisableUserOpe();\r
+               AskRemoteCurDir(CurDir, FMAX_PATH);\r
+               FileListBase = NULL;\r
+               if(Win == WIN_LOCAL)\r
+                       MakeSelectedFileList(Win, NO, NO, &FileListBase, &CancelFlg);\r
+               else\r
+                       MakeSelectedFileList(Win, YES, NO, &FileListBase, &CancelFlg);\r
 \r
                DelFlg = NO;\r
                Sts = NO;\r
@@ -2168,10 +2510,8 @@ void DeleteProc(void)
                }\r
 \r
                // デッドロック対策\r
-//             EnableUserOpe();\r
+               EnableUserOpe();\r
        }\r
-       // デッドロック対策\r
-       EnableUserOpe();\r
        return;\r
 }\r
 \r
@@ -2330,7 +2670,7 @@ static INT_PTR CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wP
                                        EndDialog(hDlg, NO_ALL);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -2443,7 +2783,12 @@ void MoveRemoteFileProc(int drop_index)
        AskRemoteCurDir(HostDir, FMAX_PATH);\r
 \r
        // ドロップ先のフォルダ名を得る\r
-       GetNodeName(WIN_REMOTE, drop_index, Pkt.File, FMAX_PATH);\r
+       // 上位のディレクトリへ移動対応\r
+//     GetNodeName(WIN_REMOTE, drop_index, Pkt.File, FMAX_PATH);\r
+       if(drop_index >= 0)\r
+               GetNodeName(WIN_REMOTE, drop_index, Pkt.File, FMAX_PATH);\r
+       else\r
+               strcpy(Pkt.File, "..");\r
 \r
        if(MoveMode == MOVE_DLG)\r
        {\r
@@ -2583,7 +2928,7 @@ static INT_PTR CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wP
                                        EndDialog(hDlg, NO_ALL);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -2757,7 +3102,12 @@ void ChangeDirDirectProc(int Win)
 \r
        strcpy(Path, "");\r
        if(Win == WIN_LOCAL)\r
-               Sts = InputDialogBox(chdir_br_dlg, GetMainHwnd(), Title, Path, FMAX_PATH+1, &Tmp, IDH_HELP_TOPIC_0000001);\r
+       // フォルダ選択ダイアログを直接表示\r
+//             Sts = InputDialogBox(chdir_br_dlg, GetMainHwnd(), Title, Path, FMAX_PATH+1, &Tmp, IDH_HELP_TOPIC_0000001);\r
+       {\r
+               if(SelectDir(GetMainHwnd(), Path, FMAX_PATH) == TRUE)\r
+                       Sts = YES;\r
+       }\r
        else\r
                Sts = InputDialogBox(chdir_dlg, GetMainHwnd(), Title, Path, FMAX_PATH+1, &Tmp, IDH_HELP_TOPIC_0000001);\r
 \r
@@ -2954,7 +3304,7 @@ INT_PTR CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LP
                                        hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000017);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -3177,7 +3527,7 @@ static LRESULT CALLBACK SizeNotifyDlgWndProc(HWND hDlg, UINT message, WPARAM wPa
                        }\r
                        return(TRUE);\r
        }\r
-    return(FALSE);\r
+       return(FALSE);\r
 }\r
 \r
 \r
@@ -3220,7 +3570,7 @@ static LRESULT CALLBACK SizeDlgWndProc(HWND hDlg, UINT message, WPARAM wParam, L
                        }\r
                        return(TRUE);\r
        }\r
-    return(FALSE);\r
+       return(FALSE);\r
 }\r
 \r
 \r
@@ -3515,18 +3865,53 @@ static int RenameUnuseableName(char *Fname)
 \r
 // 自動切断対策\r
 // NOOPコマンドでは効果が無いホストが多いためLISTコマンドを使用\r
-void NoopProc(void)\r
+void NoopProc(int Force)\r
 {\r
-       int CancelCheckWork;\r
-       CancelCheckWork = NO;\r
-       if(AskConnecting() == YES && AskUserOpeDisabled() == NO)\r
+       if(Force == YES || (AskConnecting() == YES && AskUserOpeDisabled() == NO))\r
        {\r
-               if(AskReuseCmdSkt() == NO || AskShareProh() == YES)\r
+               if(AskReuseCmdSkt() == NO || (AskShareProh() == YES && AskTransferNow() == NO))\r
                {\r
+                       if(Force == NO)\r
+                               CancelFlg = NO;\r
                        DisableUserOpe();\r
-                       DoDirListCmdSkt("", "", 999, &CancelCheckWork);\r
+                       DoDirListCmdSkt("", "", 999, &CancelFlg);\r
                        EnableUserOpe();\r
                }\r
        }\r
 }\r
 \r
+// 同時接続対応\r
+void AbortRecoveryProc(void)\r
+{\r
+       if(AskConnecting() == YES && AskUserOpeDisabled() == NO)\r
+       {\r
+               if(AskReuseCmdSkt() == NO || AskShareProh() == YES || AskTransferNow() == NO)\r
+               {\r
+                       CancelFlg = NO;\r
+                       if(AskErrorReconnect() == YES)\r
+                       {\r
+                               DisableUserOpe();\r
+                               ReConnectCmdSkt();\r
+                               GetRemoteDirForWnd(CACHE_REFRESH, &CancelFlg);\r
+                               EnableUserOpe();\r
+                       }\r
+                       else\r
+                               RemoveReceivedData(AskCmdCtrlSkt());\r
+               }\r
+       }\r
+       return;\r
+}\r
+\r
+void ReconnectProc(void)\r
+{\r
+       if(AskConnecting() == YES && AskUserOpeDisabled() == NO)\r
+       {\r
+               CancelFlg = NO;\r
+               DisableUserOpe();\r
+               ReConnectCmdSkt();\r
+               GetRemoteDirForWnd(CACHE_REFRESH, &CancelFlg);\r
+               EnableUserOpe();\r
+       }\r
+       return;\r
+}\r
+\r